2015-01-07 84 views
0

我正在阅读一个文本文件,并通过解析(逐行)来提取它的信息片段。 这里是文本文件的例子:区分数字和其他符号[C++]

0 1.1  9  -4 
a #!b  .c.  f/ 
a4 5.2s sa4.4 -2lp 

到目前为止,我能够利用拆分空的空间' '作为分隔符每行。因此,例如,我可以将"1.1"的值保存到字符串变量中。

我想要做什么(这里是我卡住的地方)是确定我正在阅读的信息是否代表一个数字。使用前面的例子,这些字符串不代表号:a #!b .c. f/ a4 5.2s sa4.4 -2lp 另外,这些字符串都表示数字:0 1.1 9 -4

然后我想存储表示编号为双类型的变量(我知道该怎么做转换的字符串加倍部分)。

那么,如何区分数字和其他符号?我正在使用C++。

+1

如何使用正则表达式? –

+0

你是什么意思? –

+0

在互联网上查看它。 –

回答

1

你可以这样做:

// check for integer 

std::string s = "42"; 

int i; 
if((std::istringstream(s) >> i).eof()) 
{ 
    // number is an integer 
    std::cout << "i = " << i << '\n'; 
} 

// check for real 

s = "4.2"; 

double d; 
if((std::istringstream(s) >> d).eof()) 
{ 
    // number is real (floating point) 
    std::cout << "d = " << d << '\n'; 
} 

eof()检查使数字后面没有非数字字符。

0

假设的电流(C++ 11)编译器,来处理这个最简单的方法是可能做使用std::stod转换。您可以将size_t的地址传递给该地址,以指示无法在转换中使用的第一个字符的位置加倍。如果整个输入转换为double,它将是字符串的结尾。如果是任何其他值,则至少有部分输入未转换。

size_t pos; 
double value = std::stod(input, &pos); 

if (pos == input.length()) 
    // the input was numeric 
else 
    // at least part of the input couldn't be converted. 
相关问题