如何跳过 space 和 stringstream 中的新行并将它们放入向量中?
How to skip the space and the new line from stringstream and put them in a vector?
我正在尝试读取包含以下人员信息(姓名、年龄、职业)的文本文件:
name 20
occupation
name 25
occupation
name 34
occupation
我阅读了整个文件,对于每一行我都使用 istringstream
跳过姓名和年龄之间的 space。
std::vector<string> readfile(std::vector<std::string> *words, char *argv){
std::ifstream file(argv); //Opens the file specified on execution
if ( !file ){
cerr << "Le fichier " << argv << " n'existe pas" << endl;
exit (-1);
} else {
std::string line;
while (std::getline(file, line)){
istringstream ss(line);
do {
string word;
ss >> word;
if (word != " " || word != "\n"){
words->push_back(word);
};
} while (ss);
};
file.close();
};
return *words;
};
我的主要是:
int main( int argc, char *argv[] ){
std::vector<std::string> compV;
readfile(&compV,argv[1]);
cout << compV.at(2) << endl;
return 0
}
当我编译并执行程序时,我得到一个space作为结果。
compV.at(0)
显示名称
comV.at(1)
显示年龄
但是 comV.at(2)
显示 space 而不是职业。
我做错了什么?
你可以做到
string mystr;
while(file >> myStr) {
string name = mystr;
file >> mystr;
int age = stoi(mystr);
file >> mystr;
int occupation = stoi(mystr);
}
只要您知道从文件中获取信息的顺序
你可以按照上面的思路去做。
当你做file >> mystr
时它会得到下一个word/number直到白色space,
一旦你得到名字,在这种情况下下一个信息将是年龄,在行尾之后,所以它会向下移动并再次执行相同的过程直到文件结束。
getline
你得到整条线。
这是一个示例程序。
这是 .txt 文件
ADD A 1 2 3 4 5 6 7 8 9 10 11 12 STOP
ADD B 4 6 8 10 12 14 16 STOP
和程序
SetT<int> a;
SetT<int> b;
string mystr, str;
ifstream testFile;
testFile.open("testDrive.txt");
if(testFile){
while(testFile >> mystr){
if(mystr == "ADD"){
testFile >> mystr;
if(mystr == "A"){
while(testFile >> mystr && mystr != "STOP"){
stringstream(mystr) >> num;
cout << "A : ";
a.Add(num);
}
} else {
while(testFile >> mystr && mystr != "STOP"){
stringstream(mystr) >> num;
cout << "B : ";
b.Add(num);
}
}
}
}
}
我正在尝试读取包含以下人员信息(姓名、年龄、职业)的文本文件:
name 20
occupation
name 25
occupation
name 34
occupation
我阅读了整个文件,对于每一行我都使用 istringstream
跳过姓名和年龄之间的 space。
std::vector<string> readfile(std::vector<std::string> *words, char *argv){
std::ifstream file(argv); //Opens the file specified on execution
if ( !file ){
cerr << "Le fichier " << argv << " n'existe pas" << endl;
exit (-1);
} else {
std::string line;
while (std::getline(file, line)){
istringstream ss(line);
do {
string word;
ss >> word;
if (word != " " || word != "\n"){
words->push_back(word);
};
} while (ss);
};
file.close();
};
return *words;
};
我的主要是:
int main( int argc, char *argv[] ){
std::vector<std::string> compV;
readfile(&compV,argv[1]);
cout << compV.at(2) << endl;
return 0
}
当我编译并执行程序时,我得到一个space作为结果。
compV.at(0)
显示名称
comV.at(1)
显示年龄
但是 comV.at(2)
显示 space 而不是职业。
我做错了什么?
你可以做到
string mystr;
while(file >> myStr) {
string name = mystr;
file >> mystr;
int age = stoi(mystr);
file >> mystr;
int occupation = stoi(mystr);
}
只要您知道从文件中获取信息的顺序 你可以按照上面的思路去做。
当你做file >> mystr
时它会得到下一个word/number直到白色space,
一旦你得到名字,在这种情况下下一个信息将是年龄,在行尾之后,所以它会向下移动并再次执行相同的过程直到文件结束。
getline
你得到整条线。
这是一个示例程序。 这是 .txt 文件
ADD A 1 2 3 4 5 6 7 8 9 10 11 12 STOP
ADD B 4 6 8 10 12 14 16 STOP
和程序
SetT<int> a;
SetT<int> b;
string mystr, str;
ifstream testFile;
testFile.open("testDrive.txt");
if(testFile){
while(testFile >> mystr){
if(mystr == "ADD"){
testFile >> mystr;
if(mystr == "A"){
while(testFile >> mystr && mystr != "STOP"){
stringstream(mystr) >> num;
cout << "A : ";
a.Add(num);
}
} else {
while(testFile >> mystr && mystr != "STOP"){
stringstream(mystr) >> num;
cout << "B : ";
b.Add(num);
}
}
}
}
}