C ++ - if语句仅适用于while循环的一次迭代

时间:2016-02-21 21:12:13

标签: c++ iostream

我有一个.txt文件:

Fruit name:
"Banana - yellow"
"Apple - red"
"Grape - purple"

我正在尝试提取每一行,并使其以任何以"开头的行输出该行中的第一个单词。

我目前的代码设置如下:

char text_line[1000];
while(cin.good()){
    std::cin.getline(text_line,1000);
    if(text_line[0] == '"')
    {
        string instr(text_line);

        std::string tok;

        std::stringstream ss(instr);

        while(std::getline(ss, tok, ' '))
        {
              cout<<"This is the first word: "<<tok<<endl;
        }

    }
}

我的问题是输出的唯一单词是"Banana",这表明我的while循环中的if语句只是针对那一行执行的。有没有办法克服这个问题?提前谢谢!

2 个答案:

答案 0 :(得分:1)

我反转逻辑:读取第一个单词并检查它是否以引号开头,然后转储其余部分:

std::string word;
while (std::cin >> word) {
    if (word[0] = '"')
        std::cout << "This is the first word: " << word.substr(1) << '\n';
    getline(cin, word); // read the rest of the line;
                        // extractor at top of loop will discard it
}

答案 1 :(得分:0)

你可以使用字符串,你必须改变循环:

#include <iostream>
#include <fstream>
#include <limits>

using std::string;
using std::cout;

const auto ssmax = std::numeric_limits<std::streamsize>::max();

int main() {

    std::ifstream file{"input.txt"};    

    char ch;
    while ( file >> ch ) {
        // if a line start with a "
        if ( ch == '"') {
            string word;
            // read and output only the first word
            file >> word;
            cout << word << '\n';
        }
        // skip rest of the line
        file.ignore(ssmax,'\n');
    }

    return 0;
}

如果文件名为&#34; input.txt&#34;有这个内容:

Fruit name:
"Banana - yellow"
"Apple - red"
"Grape - purple"

程序输出:

Banana
Apple
Grape