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

Reading input chars from single line of a file

本文关键字:输入 字符 读取 单行 文件      更新时间:2023-10-16

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

4. 7 3-+ 2 -3+

并将其一一输入到字符串变量中。

一个问题是数字和

符号之间有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;

在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);