2012-11-25 53 views
8

可能重复:
What is the proper function for comparing two C-style strings?比较两个char *平等

我的比赛状态不行!有人可以建议如何比较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; 

即使tempdata比赛,以下情况不工作:

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

} 
+0

什么是你想怎么办? – elyashiv

+1

对不起,这是我的错。这是比较2个字符* –

回答

13

由于两个stprdata是C字符​​串,您需要使用strcmp()

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

不幸的是,我仍然无法进入条件。 @NPE –

5

这种情况不会工作,因为==操作不超载为char*

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

改为使用它。

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

strcmp()返回0如果两个cstrings相等。确保你所匹配的两个cstrings都拥有一些合法的存储空间,并且在最后以null结尾。

编辑:

为了避免任何形式的麻烦和错误的,因此建议不要使用原始char*和使用std::string代替。所以最好让他们串起来比较一下。

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

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

这种方法可以为您节省很多麻烦。

+2

'0 == strcmp'看起来比'!strcmp'更加明确恕我直言 – Kos

+0

是的你是对的。旧习法很少消失。 :) –

+0

Hi @Coding Mash, 即使2个字符相同,我仍然无法输入条件。类型或stm可能与此错误有关? –

2

您试图比较两个char *。 YOu可以尝试使用strcmp(stpr, data)检查条件。

更好的使用它像

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