我的输入文件如下所示: S New York 25 76 49
我想读它们,其中S是一个字符,纽约是字符串或cstring,其他3是整数。我的问题是在纽约阅读我不能使用getline,因为3个整数来自它而不是新的一行。我该怎么办?
答案 0 :(得分:1)
我建议使用正则表达式来解析输入。添加到C ++ 11 <regex> C++ reference
中的标准库中有关维基百科的更多详情:Regular Expressions in C++
答案 1 :(得分:0)
您的另一个选择就是一次只读一个字符,只要字符isalpha()
或isspace()
后跟另一个isalpha()
,就会将字符存储在字符串中。例如:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main (void) {
char c, last = 0;
string s;
while (cin.get(c)) { /* read a character at a time */
/* if last is alpha or (last is space and current is alpha) */
if (last && (isalpha(last) || (isspace(last) && isalpha(c))))
s.push_back(last); /* add char to string */
last = c; /* set last to current */
}
cout << "'" << s << "'\n";
}
示例使用/输出
$ echo "S New York 25 76 49" | ./bin/cinget
'S New York'
它可能不像正则表达式那样优雅,但你总是可以通过遍历输入的每个字符并挑选出你需要的东西来解析你需要的东西。