#c #string #compare
Вопрос:
Я хотел сравнить строку, фактически не определяя одну из них как строку, что-то вроде этого,
if (string == "add")
Должен ли я объявлять "add"
как строку или можно сравнить аналогичным образом?
Комментарии:
1. Что это за тип
string
? Этоstd::string
объект C или просто aconst char*
?2. @e.Джеймс Оунсер хорош. Также стоит отметить, что литерал строки или последовательности символов должен быть заключен в
"
(двойные кавычки), одинарные кавычки предназначены для литералов с одним символом.
Ответ №1:
В C std::string
класс реализует операторы сравнения, поэтому вы можете выполнить сравнение, используя ==
именно то, что вы ожидали:
if (string == "add") { ... }
При правильном использовании перегрузка операторов является отличной функцией C .
Комментарии:
1. Что ж, теперь я действительно в замешательстве. Если
string
естьstd::string
объект, это сработает, но тогдаstrcmp()
бы не сработало. Что это такое? Я умираю от желания знать!:)
2. Но следует отметить, что сравнение даст другой результат, если «строка» есть
char*
!3. e.Джеймс: если «строка» — это std::строка, то
if( strcmp(string.c_str(),"add")==0 ) {...}
это сработает.4. @frunsi: Да, но в этом действительно не было бы необходимости. Я имел в виду комментарий Анона в ответе Кристофера Армстронга (где он говорит, что
if (strcmp(string, "add") == 0) { ... }
это сработало.5.@frunsi: Я беспокоюсь , что
string
этоchar*
, в таком случае, это неправильный ответ. Я надеялся, что Анон прояснит это.
Ответ №2:
Вам нужно использовать strcmp
.
if (strcmp(string,"add") == 0){
print("success!");
}
Комментарии:
1. Примечание:
strcmp()
это функция C, которая принимает указатели вconst char*
качестве своих аргументов. Это работает в данном случае , потомуstd::string
что объект преобразуется обратно в aconst char*
, но это не лучший способ сделать что-то в C2. @e.Джеймс: Нет,
std::string
неявно преобразуется вconst char*
,s.c_str()
для этого вам нужно позвонить. Но, согласно вопросу «без определения любого из них как строки»,string
это неstd::string
для начала.3. @Бен Фойгт: Ах, да, вы правы насчет обратного преобразования. Моя ошибка.
4. В коде C вы должны предпочесть strncmp() вместо strcmp(), что является более безопасным решением.
Ответ №3:
Вы могли бы использовать strcmp()
:
/* strcmp example */
#include <stdio.h>
#include <string.h>
int main ()
{
char szKey[] = "apple";
char szInput[80];
do {
printf ("Guess my favourite fruit? ");
gets (szInput);
} while (strcmp (szKey,szInput) != 0);
puts ("Correct answer!");
return 0;
}
Комментарии:
1. Это будет работать (потому что C обратно совместим с C), но это не лучший способ делать что-то на C
2. Это также связано с проблемой переполнения буфера, проверка длины на szInput отсутствует
Ответ №4:
Мы используем следующий набор инструкций на компьютерном языке C .
Цель: проверьте, равно ли значение внутри std::string
контейнера «добавить»:
if (sString.compare(“add”) == 0) { //if equal
// Execute
}