C++ 如何将矢量转换为字符串并转换回矢量
-----------------编辑----------------------- 根据juanchopanza的评论:我编辑了标题 基于jrok的评论:我使用ofstream编写,使用ifstream读取 我正在编写两个程序,第一个程序执行以下任务:C++ 如何将矢量转换为字符串并转换回矢量,c++,string,vector,fwrite,fread,C++,String,Vector,Fwrite,Fread,-----------------编辑----------------------- 根据juanchopanza的评论:我编辑了标题 基于jrok的评论:我使用ofstream编写,使用ifstream读取 我正在编写两个程序,第一个程序执行以下任务: 有一个整数向量 将其转换为字符串数组 把它写在一个文件里 第一个程序的代码: vector<int> v = {10, 200, 3000, 40000}; int i; stringstream sw; string string
vector<int> v = {10, 200, 3000, 40000};
int i;
stringstream sw;
string stringword;
cout << "Original vector = ";
for (i=0;i<v.size();i++)
{
cout << v.at(i) << " " ;
}
cout << endl;
for (i=0;i<v.size();i++)
{
sw << v[i];
}
stringword = sw.str();
cout << "Vector in array of string : "<< stringword << endl;
ofstream myfile;
myfile.open ("writtentext");
myfile << stringword;
myfile.close();
Original vector : 10 200 3000 40000
Vector in string : 10200300040000
Writing to File .....
Vector in string : 10,200,3000,40000,
string stringword;
ifstream myfile;
myfile.open ("writtentext");
getline (myfile,stringword);
cout << "Read From File = " << stringword << endl;
cout << "Convert back to vector = " ;
for (int i=0;i<stringword.length();i++)
{
if (stringword.find(','))
{
int value;
istringstream (stringword) >> value;
v.push_back(value);
stringword.erase(0, stringword.find(','));
}
}
for (int j=0;j<v.size();i++)
{
cout << v.at(i) << " " ;
}
第二个程序将执行以下任务:
vector<int> v = {10, 200, 3000, 40000};
int i;
stringstream sw;
string stringword;
cout << "Original vector = ";
for (i=0;i<v.size();i++)
{
cout << v.at(i) << " " ;
}
cout << endl;
for (i=0;i<v.size();i++)
{
sw << v[i];
}
stringword = sw.str();
cout << "Vector in array of string : "<< stringword << endl;
ofstream myfile;
myfile.open ("writtentext");
myfile << stringword;
myfile.close();
Original vector : 10 200 3000 40000
Vector in string : 10200300040000
Writing to File .....
Vector in string : 10,200,3000,40000,
string stringword;
ifstream myfile;
myfile.open ("writtentext");
getline (myfile,stringword);
cout << "Read From File = " << stringword << endl;
cout << "Convert back to vector = " ;
for (int i=0;i<stringword.length();i++)
{
if (stringword.find(','))
{
int value;
istringstream (stringword) >> value;
v.push_back(value);
stringword.erase(0, stringword.find(','));
}
}
for (int j=0;j<v.size();i++)
{
cout << v.at(i) << " " ;
}
然后我写了第二个程序的其余部分:
vector<int> v = {10, 200, 3000, 40000};
int i;
stringstream sw;
string stringword;
cout << "Original vector = ";
for (i=0;i<v.size();i++)
{
cout << v.at(i) << " " ;
}
cout << endl;
for (i=0;i<v.size();i++)
{
sw << v[i];
}
stringword = sw.str();
cout << "Vector in array of string : "<< stringword << endl;
ofstream myfile;
myfile.open ("writtentext");
myfile << stringword;
myfile.close();
Original vector : 10 200 3000 40000
Vector in string : 10200300040000
Writing to File .....
Vector in string : 10,200,3000,40000,
string stringword;
ifstream myfile;
myfile.open ("writtentext");
getline (myfile,stringword);
cout << "Read From File = " << stringword << endl;
cout << "Convert back to vector = " ;
for (int i=0;i<stringword.length();i++)
{
if (stringword.find(','))
{
int value;
istringstream (stringword) >> value;
v.push_back(value);
stringword.erase(0, stringword.find(','));
}
}
for (int j=0;j<v.size();i++)
{
cout << v.at(i) << " " ;
}
我做错了什么?谢谢最简单的方法是在编写时插入一个空格字符作为分隔符,因为这是
操作符>
sw << v[i] << ' ';
sw是的,这个问题已经有一年多的历史了,可能与最初的提问者完全无关,但谷歌把我带到了这里,所以它也可能把其他人带到这里
发帖时,必须添加#包括
和main
,而这些东西更适合用来帮助别人。因为你的问题,这也很重要
第二个代码不起作用的原因都在这个模块中
for (int i=0;i<stringword.length();i++)
{
if (stringword.find(','))
{
int value;
istringstream (stringword) >> value;
v.push_back(value);
stringword.erase(0, stringword.find(','));
}
}
它使用i
。这是在另一个作用域中的for循环中声明的。
即使添加了main和includes,您给出的代码也无法编译。见鬼,v
甚至没有在第二个程序中定义
但是,这还不够,因为每个循环都会重新计算stringword.length()的条件。在这个特定的实例中,它是有效的,因为您的整数每次都会得到一个额外的数字,但假设您的输入文件是1,2,3,4,
:
- 循环通常执行三次
- 第四次,stringword是
4,
stringword.length()
返回2,但是i
已经值为3,所以i>值;
v、 推回(值);
擦除(0,stringword.find(',')+1);
}
对于(int i=0;i 难道你不想使用一个分隔符,比如分隔向量轴。然后只需读取某个分隔符,而不是计算X轴是10还是10200……有没有理由你不使用fstream
来写入文件?我认为是“字符串”而不是“字符串数组”会比较容易混淆。@jrok我编辑程序并使用fstream。现在写-读操作非常有效。但我仍然无法将字符串转换回原始向量。正如@Shark所说,使用分隔符来区分每个字段。可以使用逗号、空格等任意字符。使用getline和parse结果,每次读取一行,使用分隔符作为标记。现在,您有很多子字符串,每个子字符串表示整数。使用函数(如atoi)将这些字符串转换为int。我在帖子中编辑了代码。当我想将其推回到vector@dulipat我建议你发一个新问题。