2012-11-25 4 views
8

Mögliche Duplizieren:
What is the proper function for comparing two C-style strings?Vergleicht man zwei char * für die Gleichstellung

Mein Spiel Zustand funktioniert nicht! Kann jemand beraten, wie man mit C-Art Saiten vergleicht?

void saveData(string line, char* data){ 
    char *testString = new char[800]; 
    char *stpr; 
    int i=0; 
    bool isData=false; 
    char *com = data; 
    strcpy(testString,line.c_str()); 
     stpr = strtok(testString, ","); 
     while (stpr != NULL) { 
      string temp = stpr; 
      cout << temp << " ===== " << data << endl; 

Obwohl temp und data Spiel, die folgende Bedingung nicht funktioniert:

if (stpr==data) { 
    isData = true; 
} 

Nicht sicher, ob das hilft. Die SaveData() Funktion von der Funktion unten genannt wird:

void readFile(char* str){ 
    string c="", line, fileName="result.txt", data(str); 
     ifstream inFile; 
    inFile.open(fileName.c_str()); 
    resultlist.clear(); 

    if(inFile.good()){  
     while(!inFile.eof()){ 
      getline(inFile, line); 
      if(line.find(data)!=string::npos){ 
       cout << line << endl; 
      } 
      saveData(line, str); 
     } 
     inFile.close(); 
    } 

} 
+0

, was Sie zu tun versuchen? – elyashiv

+1

Entschuldigung, es ist mein Fehler. Es vergleicht 2 char * –

Antwort

13

Da sowohl stpr und data sind C-Strings, müssen Sie verwenden strcmp():

if (strcmp(stpr, data) == 0) { 
    ... 
+0

Leider kann ich die Bedingung noch nicht eingeben. @NPE –

5

Dieser Zustand wird nicht funktionieren, weil die == Betreiber nicht überlastet wird für char*.

if(stpr==data) 
{ 
    isData = true; 
} 

Verwenden Sie diese stattdessen.

if (strcmp(stpr, data) == 0) 
{ 
    isData = true ; 
} 

strcmp() kehrt 0 wenn beide CStrings sind gleich. Stellen Sie sicher, dass beide übereinstimmenden Cstrings einen legalen Speicher enthalten und am Ende null sind.

Edit:

Um jede Art von Ärger zu vermeiden und Fehler, ist es ratsam, nicht roh char* zu verwenden und std::string stattdessen verwenden. Also mach besser Strings und vergleiche sie.

std::string data ; //passed or declared as string 
std::string stpr ; 
..... 
//Do some work. 

if (stpr == data) 
    //do work here 

Dieser Ansatz würde Ihnen viele Probleme ersparen.

+2

'0 == strcmp' sieht etwas expliziter aus als'! Strcmp' IMHO – Kos

+0

Ja, Sie haben Recht. Alte Praktiken verschwinden selten. :) –

+0

Hallo @ Coding Mash, Ich bin immer noch nicht in der Lage, die Bedingung eingeben, auch wenn 2 Zeichen gleich sind. Könnte sich der Typ oder Stm auf diesen Fehler beziehen? –

2

Sie versuchen, zwei char * zu vergleichen. Sie können versuchen, strcmp(stpr, data) für die Überprüfung der Bedingungen zu verwenden.

Besser verwenden Sie es wie

if(strcmp(stpr, data)==0){..}