从文件的单行读取输入字符

时间:2013-12-18 14:05:55

标签: c++ inputstream

所以我的任务是从文件中读取一行 例如:

4. 7 3-+ 2 -3+

并将其逐个送入字符串变量。

一个问题是数字和符号之间有0个或更多的空格,但一个数字和另一个数字之间至少有1个空格。那么如何区分每个数字/符号呢?

2 个答案:

答案 0 :(得分:1)

我建议您通过getline()读取整行,然后逐字符解析字符串,并可能构建另一个字符串。

cin.getline( myString );
for ( int i = 0; i < myString.size(); i++ ) {
  if ( myString[i] != ' ' ) {

    if ( myString[i] >= '0' && myString[i] <= '9' {
      // do something with numbers;
    } else {
      // do something with characters.
    }

  }
}

其他选项是逐个字符阅读。这些解决方案仅适用于单位数字。对于多个数字,您将不得不再次按字符构建数字。

char ch;
cin >> std::noskipws; // needed to recognize the end of line character.
while ( cin >> ch && ch != '\n' ) {
  if ( ch != ' ' ) {

    if ( ch >= '0' && ch <= '9' {
      // do something with numbers;
    } else {
      // do something with characters.
    }

  }
}
cin >> std::skipws;

答案 1 :(得分:0)

在C ++中,您可以使用getline()将整行读入字符串。现在字符串支持find_first_of()find_first_not_of(),它允许有效读取直到空格然后跳过它。

未经测试:

string delims = " \t"
getline(file, line);
int tokenStart, tokenEnd = 0;
string token;
tokenStart = line.find_first_not_of(delims, tokenEnd);
tokenEnd = line.find_first_of(delims, tokenStart);
// substr expects length, not end of substring
token = line.substr(tokenStart, tokenEnd-tokenStart);