输入文本文件:
s_1 s_2 1
s_3 s_4 2
s_5 s_6 3
我想要一个向量,它将每个字符串元素存储到向量中。请记住,我一直在研究其他帖子,但是我无法通过空白分开。
这是我的代码:
#include<iostream>
using std::cout; using std::endl;
#include<fstream>
using std::ifstream;
#include<vector>
using std::vector;
#include<string>
using std::string; using std::getline;
#include<sstream>
using std::stringstream; using std::ostringstream; using std::istringstream;
void read_file(const string &fname) {
string file;
string line;
vector<string> temp_vec;
file = fname;
ifstream in_file;
in_file.open(file);
while(getline(in_file, line)) {
istringstream ss(line);
string token;
getline(ss, token, ' ');
temp_vec.push_back(token);
}
for (string ele:temp_vec) { //print the content of the vector
cout << ele << endl;
}
}
int main() {
read_file("text_file.txt"); //insert your file path here
}
我在此代码中的错误是打印了以下内容:
s_1
s_3
s_5
但是,我希望向量存储每个元素并且是:
{s_1,s_2,1,s_3,s_4,2,s_5,s_6,3}
答案 0 :(得分:2)
该行:
Download /dl/android/maven2/com/android/tools/build/gradle-core/3.1.2/gradle-core-3.1.2.pom
将行提取到空格。然后,对getline(ss, token, ' ');
的下一个调用从下一行开始,完全跳过前一行的所有进一步输入。
您要提取行的每个元素。这可以通过使用简单的getline
循环来完成:
while
请注意,您不需要知道用空格分隔多少个项目。因此,如果每行有3个以上的项目,则该循环仍将正确运行而无需更改代码。
答案 1 :(得分:1)
#include<iostream>
using std::cout; using std::endl;
#include<fstream>
using std::ifstream;
#include<vector>
using std::vector;
#include<string>
using std::string;
void read_file(const string &fname) {
ifstream in_file(fname);
string token;
vector<string> temp_vec;
while( in_file.good() ) {
in_file >> token;
temp_vec.push_back(token);
}
for (string ele: temp_vec) { //print the content of the vector
cout << ele << endl;
}
}
int main() {
read_file("text_file.txt"); //insert your file path here
}
答案 2 :(得分:0)
string token1, token2, token3;
while(getline(in_file, line)) {
istringstream ss(line);
ss >> token1 >> token2 >> token3;
temp_vec.push_back(token1);
temp_vec.push_back(token2);
temp_vec.push_back(token3);
}
cout << "{";
for (auto &ele : temp_vec) { //print the content of the vector
cout << ele;
if (&ele != temp_vec.data() + temp_vec.size() - 1) {
cout << ", ";
}
}
cout << "}" << endl