C++ 在C+中读取文本文件+;并将值解析为向量
我有一个包含如下值的文本文件:C++ 在C+中读取文本文件+;并将值解析为向量,c++,string,vector,C++,String,Vector,我有一个包含如下值的文本文件: 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
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;
}
我终于想出了办法。我迭代标记并检查它是否是一个数字,例如
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是一个小函数,用于检查正则表达式[0-9]是否与字符串输入匹配我在这里没有看到任何问题。但您应该将名称向量移出该循环,否则它将始终只包含一个元素。前两个标记是否始终是全名?中间的首字母怎么样?我真的很喜欢这种类型的东西(解析),我希望你能带着一个问题回来。尝试使用OOP。这将简化您的问题。@Nabin想详细说明吗?您想知道如何检查字符串是否为整数,和/或将字符串解析为整数吗?整数的目标向量是否仍将存储在字符串中,或者您希望
向量?如果他使用对象使用fstream.write进行存储(&obj,sizeof(obj))然后他就可以检索整个对象,这样就很容易了。不是吗?@Nabin No。那不行。你不能假设一个对象的内存布局在不同的编译器之间是相同的,甚至同一个编译器在不同的模式下也是相同的。此外,如果类包含虚拟函数,这将完全中断。面向对象的方法是使用serialize函数或流运算符。
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()));
}
}