2016-11-01 2 views
-4
using namespace std; 

void print(vector<string>str) { 

    vector<string>::iterator it=str.begin(); 
    while (it!=str.end()) { 
     cout<<*it<<endl; 
     it=it+1; 
    } 
} 

void collectWord(vector<string>&str,string line) { 

    const char* delim=" ,.-"; 
    char* l =new char[line.length()+1]; 
    strcpy(l,line.c_str()); 
    char *pch; 
    pch=strtok(l,delim); 

    while (pch!=NULL) { 

     // cout<<pch<<endl; 
     str.push_back(pch); 
     pch=strtok(NULL,delim); 
    } 

    delete[] l; 

} 

int main() { 

    string line; 
    vector<string>spam; 

    ifstream spamfile("spam.txt"); 
    if (spamfile.is_open()) { 
     while (getline(spamfile,line)) { 
      collectWord(spam,line); 
     } 
     spamfile.close(); 
    } 
    else{ 
     cout<<"Unable to open file"<<endl; 
    } 

    print(spam); 

    return 0; 

} 

Wenn ich dieses Programm in Terminal-Ausgabe laufen ist in Ordnung, aber wenn ich es in ide (Clion (c/C++)) laufen Ausgabe unterscheidetWenn ich dasselbe C++ - Programm nach Terminal und demselben Programm in IDE (CLion) laufen lasse, ist Ausgabe anders warum?

+2

Bitte Formatieren Sie den Code. Es ist nicht lesbar. –

+0

Dann haben Sie ub, weil Sie gelöschten Speicher in Ihrem Vektor speichern, wenn Sie die Zeichenfolge strtok. Verwenden Sie C++ - Methoden, um mit Strings umzugehen –

+0

Verwenden Sie nicht 'strtok'. Sie haben bereits ein 'std :: string' Objekt; Verwenden Sie 'std :: string :: find_first_of()'. –

Antwort

3

ifstream spamfile("spam.txt");

Dadurch wird die Spam-Datei öffnet. txt relativ zum "Current Working Directory" (CWD). CLion führt Ihre ausführbare Datei aus einem anderen Ordner als wenn Sie es über die Befehlszeile ausführen, also ist die CWD anders.

Sie müssen sicherstellen, dass spam.txt in dem Verzeichnis vorhanden ist, in dem CLion Ihre ausführbare Datei erstellt.

edit: alternativ denke ich CLION Sie aus, welche CWD ausführen, um die ausführbare Datei wählen können, oder Sie können eine voll angegebenen Pfad für die Datei (wie C: \ MyStuff \ spam.txt) geben

Verwandte Themen