使用ifstream和get()从文件中获取一个用引号括起来的字符串

时间:2018-02-06 20:42:30

标签: c++ c++11 io ifstream

我正在尝试解析文件中的字符串,文件中用双引号表示。一旦我找到一个字符串,我就会将它存储在一个变量中,然后用它做我想做的事(为了这个问题的目的,我只想说打印它)。我的问题是我无法弄清楚如何获取这些字符串,特别是如果它们有空格。 以下是输入的示例:

100 20
"String"
"With Space"
'c' ' '

注意:此输入中的唯一字符串是StringWith Space。最终应忽略所有其他数据。这是我的代码,根本不打印任何东西。

int main(int argc, char *argv[]) {
    for (int i = 1; i < argc; i++) {
        ifstream input;
        input.open(argv[i]);

        char c;
        while (input.get(c)) {
            if (c == '"') {
                string s;
                while (c != '"') {
                    char letter;
                    input.get(letter);
                    s += letter;
                }
                cout << s << "\n";
            }       
        }
    }
}

注意:我已经包含了iostream和fstream。我正在使用命名空间标准。

1 个答案:

答案 0 :(得分:1)

在这个片段中:

    if (c == '"') {
        string s;
        while (c != '"') {

永远不能输入while循环。

在测试引用字符串的结尾之前,您需要阅读下一个字符。

这样的事情:

    if (c == '"') {
        string s;
        while (input.get(c) && c != '"') {
            s += c;
        }
        cout << s << "\n";
    }