Сравнение двух символов * на равенство

Возможный дубликат:
Какова правильная функция для сравнения двух строк в стиле C?

Мое условие соответствия не работает! Может кто-нибудь посоветовать, как сравнивать строки в стиле 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;

Даже если temp а также data соответствует следующее условие не работает:

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

Не уверен, что это поможет. SaveData() функция вызывается из функции ниже:

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

}

9

Решение

Поскольку оба stpr а также data C строки, вам нужно использовать strcmp():

#include <string.h>
...
if (strcmp(stpr, data) == 0) {
...
16

Другие решения

Это условие не будет работать, потому что == оператор не перегружен для char*,

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

Используйте это вместо этого.

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

strcmp() возвращается 0 если оба cstrings равны. Убедитесь, что обе совпадающие cstrings содержат некоторую допустимую память и в конце завершаются нулем.

Редактировать:

Чтобы избежать каких-либо хлопот и ошибок, желательно не использовать сырые char* и использовать std::string вместо. Так что лучше сделайте из них струны и сравните их.

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

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

Такой подход избавит вас от многих неприятностей.

5

Вы пытаетесь сравнить два символа *. Вы можете попробовать использовать strcmp(stpr, data) для проверки условий.

Лучше использовать как

 if(strcmp(stpr, data)==0){..}
2
По вопросам рекламы [email protected]