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