给出以下格式:
保罗34 56 72 89 92
我想读取名称并将数字放入/解析为int矢量标记。 上面格式中的所有内容都由空格分隔。
这是我尝试解决的问题。有一个错字...排名实际上是分数
StudentEntry:: StudentEntry(string line) {
int temp = line.find(' '); // end of the name
name = line.substr(0, temp);
string numbers = line.substr(temp+1);
for (int i=0; i<rank.size(); i++) {
rank.push_back(i);
cout << "RANK: " << rank[i] <<endl;
}
}
答案 0 :(得分:0)
这是一个容易尝试的解决方案。如果要获得更高的性能/灵活性,则需要做更多的研究。
如您所述,此解决方案要求输入字符串中的组件之间用空格隔开,以便能够产生正确的结果。
它使用std::istringstream
的方式与std::cin
一样。您为其提供输入字符串,并继续从中读取空格分隔的组件。
#include <vector>
#include <string>
#include <sstream>
std::istringstream iss{ line }; // initialize with the input string
std::string name;
iss >> name; // extract the first component as a string
std::vector<int> marks;
for (int num = 0; iss >> num;) // extract rest of the components as int
marks.push_back(num); // and store them in a vector
请记住,名称不能包含空格。
例如,此解决方案不适用于以下输入:Paul Walker 34 56 72 89 92
。
为了能够使用包含空格的名称来解析字符串,您将不得不更深入地研究并做更复杂的事情。