Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将矢量转换为字符串并转换回矢量_C++_String_Vector_Fwrite_Fread - Fatal编程技术网

C++ 如何将矢量转换为字符串并转换回矢量

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

-----------------编辑-----------------------

根据juanchopanza的评论:我编辑了标题

基于jrok的评论:我使用ofstream编写,使用ifstream读取

我正在编写两个程序,第一个程序执行以下任务:

  • 有一个整数向量
  • 将其转换为字符串数组
  • 把它写在一个文件里
  • 第一个程序的代码:

    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) << " " ;
    }
    
    第二个程序将执行以下任务:

  • 读文件
  • 将字符串数组转换回原始向量
  • -----------------编辑-----------------------

    现在,由于Shark和Jrok,我使用逗号作为分隔符,书写和阅读都很好。第一个程序的输出:

    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我建议你发一个新问题。