如何在不使用getline的情况下读入包含C ++空格的字符串

时间:2018-03-17 02:49:24

标签: c++

我的输入文件如下所示: S New York 25 76 49

我想读它们,其中S是一个字符,纽约是字符串或cstring,其他3是整数。我的问题是在纽约阅读我不能使用getline,因为3个整数来自它而不是新的一行。我该怎么办?

2 个答案:

答案 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'

它可能不像正则表达式那样优雅,但你总是可以通过遍历输入的每个字符并挑选出你需要的东西来解析你需要的东西。