web-dev-qa-db-fra.com

Comparaison de deux caractères * pour l'égalité

Duplicata possible:
Quelle est la fonction appropriée pour comparer deux chaînes de style C?

Ma condition de match ne fonctionne pas! Quelqu'un peut-il conseiller la comparaison avec les cordes de style C?

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;

Même si temp et data correspondent, la condition suivante ne fonctionne pas:

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

Je ne sais pas si cela aide. La fonction SaveData() est appelée à partir de la fonction ci-dessous:

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();
    }

}
11
Bryan Wong

Comme stpr et data sont des chaînes C, vous devez utiliser strcmp() :

#include <string.h>
...
if (strcmp(stpr, data) == 0) {
    // strings are equal
    ...
} else {
    // strings are NOT equal
}
19
NPE

Cette condition ne fonctionnera pas car l'opérateur == N'est pas surchargé pour char*.

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

Utilisez-le à la place.

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

strcmp() renvoie 0 si les deux chaînes sont égales. Assurez-vous que les deux chaînes que vous faites correspondre contiennent une certaine mémoire légale et sont terminées par null à la fin.

Éditer:

Pour éviter toute sorte de tracas et de bugs, il est conseillé de ne pas utiliser de brut char* Et d'utiliser std::string À la place. Il vaut donc mieux leur faire des chaînes et les comparer.

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

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

Cette approche vous éviterait beaucoup de problèmes.

5
Coding Mash

Vous essayez de comparer deux caractères *. Vous pouvez essayer d'utiliser strcmp(stpr, data) pour vérifier les conditions.

Mieux vaut l'utiliser comme

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