Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++_Assign - Fatal编程技术网

C++ 由两个向量赋值的错误?

C++ 由两个向量赋值的错误?,c++,assign,C++,Assign,我有两个问题, 第二个文件n_cartelle_mod.txt没有完全从n_cartelle.txt更改 第二个问题是赋值nomi_txt[cont]=n_cartelle[i] 为什么? 问题在于substr的位置、找到txt文件的时间以及分配之后 #include <iostream> #include <fstream> #include <vector> #include <string> #include <cstdlib>

我有两个问题, 第二个文件n_cartelle_mod.txt没有完全从n_cartelle.txt更改 第二个问题是赋值nomi_txt[cont]=n_cartelle[i] 为什么? 问题在于substr的位置、找到txt文件的时间以及分配之后

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv) {
    string arg = argv[2];                       
    int arch;                                   
    string cambia ="cd ";
    string cartella = argv[1];                  

    vector <string> n_cartelle;
    vector <string> nomi_txt;
    int cont = 0;


    //start code 

    if(argc == 3) {

        cambia += cartella.substr();
        cambia += " && dir > n_cartelle.txt";

        const char * c_cambia = cambia.c_str(); 


        arch = system(c_cambia);
        if(arch == 0)
            cout << "\n Cartella cambiata con successo"<<endl
                 <<"\n  Documento di testo con nome e tipo di file creato con successo"<<endl;
        else{

            cout << "\nErrore nella chiamata a SYSTEM"<<endl;
            exit(EXIT_FAILURE);
        }

        //decifro il file creato:

        //prendo le stringhe dal file-----------------------------------------------


        ifstream in("n_cartelle.txt");
        ofstream out("n_cartelle_mod.txt");
        string linea;

        while(getline(in,linea)){

            if(linea.size() < 2)
                out << "0000000000000000000000000000000000000000000000000\n";
            else
                out << linea<<"\n";

            //n_cartelle.push_back(linea);
        }
        cout << "File creato e modificato, vado avanti\n";

        string linea2;
        ifstream in2("n_cartelle_mod.txt");
        while(getline(in2,linea2))
            n_cartelle.push_back(linea2);

        cout << "Caricato il <vector>\n";

        //-------------------------END-------------------------------------------


        //problem is here

        for(int i=0; i < n_cartelle.size()-4; ++i){

            cout <<"i volte: "<<i<<endl;

            if(n_cartelle[i].substr(n_cartelle[i].size()-3) == "txt"){
                cout << "capperi\n";

                nomi_txt[cont] = n_cartelle[i];


                cont++;
            }


        }



    }


    else {
        cout << "Parametri inesatti.\n\n"       
             << "Esempio di utilizzo:\n        Search.exe c:\\\\User paolo"<<endl;

    }
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
字符串arg=argv[2];
内拱;
字符串cambia=“cd”;
字符串cartella=argv[1];
向量n_-cartelle;
向量nomi_txt;
int cont=0;
//起始代码
如果(argc==3){
cambia+=cartella.substr();
坎比亚+=“&&dir>n_cartelle.txt”;
const char*c_cambia=cambia.c_str();
arch=系统(c_cambia);
如果(arch==0)

cout在执行ifstream in2(“n_cartelle_mod.txt”)
之前,您需要关闭
out
。默认情况下,文件的输出是缓冲的,在执行此操作之前,最后一块输出不会刷新到文件中

或者您可以在
输出中使用
endl
而不是
“\n”
由于您从未设置
nomi_txt
的大小,这将导致未定义的行为,因为您将访问超出向量边界的元素。如果希望
nomi_txt
具有与
n_cartelle
相同数量的元素,则需要调整其大小:

nomi_txt.resize(n_cartelle.size());
在循环之前


已经提到了在重新打开文件进行输入之前关闭std::ofstream的问题。

出现的一个问题是
n_cartelle
中的最后两个向量项被
for
循环跳过:

for(int i=0; i < n_cartelle.size()-4; ++i) {
for(int i=0;i

此外,我认为
nomi_text
应该使用
.push_back
或类似的函数向其添加元素,而不是对可能不存在的索引进行索引赋值。

您必须替换此语句

nomi_txt[cont] = n_cartelle[i];
为了


因为vector nomi_txt为空,您可能无法使用下标运算符访问不存在的元素。

另一个问题是缺少一些代码。。。
nomi_txt[cont] = n_cartelle[i];
nomi_txt.push_back( n_cartelle[i] );