所以我的任务是从文件中读取一行 例如:
4. 7 3-+ 2 -3+
并将其逐个送入字符串变量。
一个问题是数字和符号之间有0个或更多的空格,但一个数字和另一个数字之间至少有1个空格。那么如何区分每个数字/符号呢?
答案 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);