【问题标题】:Get a string, denoted by quotes, out of a file with ifstream and get()使用 ifstream 和 get() 从文件中获取用引号表示的字符串
【发布时间】:2018-02-06 20:42:29
【问题描述】:

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

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。我正在使用命名空间标准。

【问题讨论】:

  • 很遗憾你不能使用 C++14 std::quoted...顺便说一句,永远不要使用 using namespace std;。那个可憎的只是自找麻烦。

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


【解决方案1】:

在这个片段中:

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

while 循环永远无法进入。

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

所以是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2019-08-26
    • 2021-11-09
    • 2018-07-06
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多