2013-12-17 51 views
0

如果我想一個字符串比較另一個字符串,就是那裏,爲什麼我應該或不應該使用將字符串與另一個字符串進行比較的最佳方法是什麼?

word1 ==word2; 

strcmp(word1,word2); 

什麼特別的原因?

編輯1:我在我的問題犯了一個錯誤,忘記用「==」,而不是「=」

+0

這是C++,你應該使用'word1.compare(word2)'vs'strcmp'。和運算符比較是'==' – smac89

+1

C++? strcmp不是C++。 – dandan78

+0

@ dandan78它可以在C++中使用。 – rspencer

回答

5
word1 =word2; 

,因爲它是一個任務,而不是比較你不應該使用這個。慣用的方法來比較兩個std::strings平等

bool eq = word1 == word2; 

如果你想知道,如果其中一個字符串是低於其他,然後使用std::string::compare方法:

int cmp = word1.compare(word2); // beware: 0 means equality 
3

如果你聲明你的變量爲std::string你必須使用:

word1 == word2 

但是,如果你宣佈他們是s char*您必須使用:

strcmp(word1, word2) 
+0

什麼是字符串?你的意思是'std :: string'? – Shoe

+0

什麼是std :: string和string之間的區別? – Gabson

+0

@Gabson'std'是聲明類'string'的命名空間。如果你在你的CPP源文件中放入'using namespace std;',那麼沒有必要在每次使用中明確指出它。 – MondKin

1

strcmp不僅僅是簡單地檢查兩個字符串是否相等。從cplusplus.com參考我得到它

返回指示 串之間的關係的積分值:一個零值表示兩個字符串相等。大於零的值 表示不匹配 的第一個字符在str1中的值比在str2中的值大;而小於 的值表示相反。

這就是爲什麼它應該是更有效地使用if (str1==str2)

+0

如果'str1'和'str2'是'char *',那麼使用'str1 == str2'比較它們不會產生與'strcmp'相同的效果。如果你使用'==',你只是比較這些指針中包含的地址。 – MondKin

1

慣用方式在C++中使用和處理字符串是使用標準std::string之一。

這個類有比較操作爲您提供方便:

#include <string> 

int main() { 
    std::string foo = "foo", bar = "bar"; 
    if (foo == bar) { 
     .... 
    } 
} 

如果你不是去使用char*的粗糙和errorful路,再下面是錯誤的:

const char *foo = "foo", *bar = "bar"; 

if (foo == bar) { 
} 

這只是比較foo - 和bar -strings的地址,因爲這些變量確實是指針。作爲初學者,指針和原始字符串處理都相當困難,所以最好從標準容器開始(如果std::string是一個)。

1

std::string是在C++中做字符串的OOP方式。像c字符串中的「字符串」實際上是一個字符數組。使用==並不會像你想象的那樣工作,因爲它會比較第一個字符的地址(而不是字符串的內容)。欲瞭解更多信息,查找指針。在這裏你使用strcmp

如果您正在使用std::string(特徵爲#include <string>和申報string myvar;代替char* myvar)使用==

相關問題