我有一个包含这样的值的文本文件:
John Doe 25 28 35 50
Jane Doe 30 10 31 76 89
John Roe 12 34 54
所以,我用以下程序读取文件:
vector<string> lines()
{
vector<string> lines;
string line;
ifstream myfile("textfile.txt");
if (myfile.is_open())
{
while (getline(myfile, line))
{
lines.push_back(line);
}
myfile.close();
}
else
{
cout << "Unable to open file";
}
return lines;
}
因为我能够逐行阅读内容......到目前为止一切顺利。
然后,我正在迭代试图读取名称和数值的lines()
:
for (auto line : lines()) {
string buf; // Have a buffer string
stringstream ss(line); // Insert the string into a stream
vector<string> tokens;
while (ss >> buf){
tokens.push_back(buf);
}
string name = tokens[0] + " " + tokens[1];
vector<string> names; // names holder vector
names.push_back(name);
vector<string> numbers;
for (auto token : tokens){
// pseudo code
// if token is not a name then add to the numbers vector
}
// do something else
}
答案 0 :(得分:0)
我终于想出了如何做到这一点。我会迭代令牌并检查它是否是一个数字,例如
for (auto token : tokens){
// if token is an Int32 then add to the number vector
if (isInt32(token)){
numbers.push_back(atoi(token.c_str()));
}
}
注意: isInt32是一个小函数,用于检查regex [0-9]是否与字符串输入匹配
答案 1 :(得分:0)
我真的没有在这里看到一个问题。但是你应该将你的名字向量移到该循环之外,否则它将始终只容纳一个元素。前两个代币总是全名吗?中间的首字母怎么样?我真的很喜欢这种事情(解析),我希望你回来一个问题。