2012-11-25 153 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){..}