我有一个.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语句只是针对那一行执行的。有没有办法克服这个问题?提前谢谢!
答案 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