读取字符串直到行尾
Reading strings until end of line?
有没有办法将用空格分隔的连续单词作为字符串读取,直到在C++中找到行的末尾?准确地说,我正在处理一个算法问题,输入如下:
some_word1 some_word2 some_word3 (...) some_wordn
other_data
诀窍是我不知道第一行会有多少单词,只是我应该把它们作为单独的单词来读,以便进一步处理。我知道我可以使用getline()
,但在那之后,当出现空格时,我必须逐个字符地将每个单词写入一个新字符串。这并不是说工作量很大,我只是好奇是否有更好的方法。
为什么在使用getline
之后必须逐个字符地工作?解析面向行的输入的通常方式是逐行读取,使用getline
,然后使用std::istringstream
解析该行(假设这是最合适的解析工具,就像您的案例)。所以要读取文件:
std::string line;
while ( std::getline( input, line ) ) {
std::istringstream parse( line );
// ...
}
您可以使用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
您可以看到空间未被保存。
在这里你可以看到相关的答案:
- 用C拆分字符串++
- 逐字输入字符串
我建议将整行读取为字符串,并将字符串拆分为字符串向量。拆分字符串可以从这个问题中找到在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);
相关文章:
- 如何使用Luacneneneba API正确读取字符串和表参数
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何从字符串C++读取多个整数
- 使用字符串读取的字符串
- 从文件到字符串读取并传递到功能
- C++ cin 将字符串读取到 int 类型中返回 0
- 使用CIN和/或字符串读取带有混合输入的文本文件
- 将两个字符串作为一个字符串读取
- 如何将WCP 1252字符串读取为std::tstring
- 如何将字符串读取为字符串向量或将整数读取为整数向量
- 将一系列字符串读取到char数组中
- 如何在 c++ 中将文件中的段落作为单个字符串读取
- 从 txt 文件中将后缀表达式作为字符串读取
- C++银行项目;如何将一组字符串读取为单独的浮点数并添加它们
- 在 c++ 中循环字符串读取器
- 将字符串读取为命令行参数C++
- 如何在QT中使用QDomDocument对象将字符串读取为XML
- 使用Matio库将.mat文件中的字符串读取到C++中
- 作为字符串读取第一列数据文件
- 如何在字符串读取完成时停止c++的recv() ?