2013-12-17 6 views
0

Если я хочу, чтобы сравнить строки в другую строку, есть ли конкретная причина, почему я должен или не должен использоватьКаков наилучший способ сравнить строку с другой строкой?

word1 ==word2; 

против

strcmp(word1,word2); 

?

EDIT 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

Что такое 'string'? Вы имели в виду 'std :: string'? – Shoe

+0

Какая разница между std :: string и string? – Gabson

+0

@Gabson 'std' - это пространство имен, в котором объявлен класс' string'. Нет необходимости указывать его явно при каждом использовании, если вы ставите 'using namespace std;' раньше в исходный файл CPP. – MondKin

1

зЬгстр делает больше, чем просто проверить, если обе строки равны. Из обращения 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) { 
     .... 
    } 
} 

Если вы вместо того, чтобы идти грубый и errorful путь использования char*, то следующее неверно:

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

if (foo == bar) { 
} 

Это просто сравнивает адреса foo - и bar -строки, поскольку переменные являются указателями на самом деле. Как новичок, оба указателя и обработка необработанных строк довольно жесткие, поэтому лучше начать со стандартных контейнеров (если один из них - std::string).

1

std::string больше подходит для ООП для строк в формате C++. «Строка», как в строке c, на самом деле представляет собой массив символов.Использование == с этим не будет работать, как вы могли бы подумать, поскольку оно будет сравнивать адрес первого символа (а не содержимого строки). Для получения дополнительной информации смотрите указатели. Здесь вы используете strcmp.

Если вы используете std::string (характеризующуюся #include <string> и декларацию string myvar; вместо char* myvar) использовать ==.

Смежные вопросы