有没有办法读取由空格分隔的连续单词作为字符串,直到在C ++中找到行尾?确切地说,我正在研究算法问题,输入如下:
some_word1 some_word2 some_word3 (...) some_wordn
other_data
诀窍是我不知道第一行会有多少单词,只是我应该将它们作为单独的单词进行进一步处理。我知道我可以使用getline()
,但之后我必须使用char-by-char在空格出现时将每个单词写入一个新字符串。这不是很多工作,我只是好奇是否有更好的方法。
答案 0 :(得分:4)
使用getline
后,为什么要逐个字符地工作?
解析面向行的输入的常用方法是逐行读取,
使用getline
,然后使用std::istringstream
来解析该行
(假设这是最合适的解析工具,就像在你的
案件)。所以要阅读文件:
std::string line;
while ( std::getline( input, line ) ) {
std::istringstream parse( line );
// ...
}
答案 1 :(得分:2)
您可以使用sstream
并将其与getline()
结合使用,这是您已经知道的事情。
#include <iostream>
#include <sstream>
int main()
{
std::string fl;
std::getline(std::cin, fl); // get first line
std::istringstream iss(fl);
std::string word;
while(iss >> word) {
std::cout << "|" << word << "|\n";
}
// now parse the other lines
while (std::getline(std::cin, fl)) {
std::cout << fl << "\n";
}
}
输出:
a b
|a|
|b|
a
a
g
g
t
t
您可以看到未保存空格。
在这里您可以看到相关答案:
答案 2 :(得分:0)
我建议将整行读作字符串并将字符串拆分为字符串向量。 可以从此问题Split a string in C++?
中找到拆分字符串string linestr;
cin>>linestr;
string buf; // Have a buffer string
stringstream ss(linestr); // Insert the string into a stream
vector<string> tokens; // Create vector to hold our words
while (ss >> buf)
tokens.push_back(buf);