Сравните строки в виде char**

int main( int argc, char ** argv ) 
{
   if ( *argv[2] == *argv[3]) { ... }
   return true;
}

Это неправильно, не так ли?!

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


person mr. Vachovsky    schedule 11.12.2010    source источник
comment
И это не конкретно C++, C был бы лучшим тегом.   -  person Ryan Li    schedule 11.12.2010


Ответы (5)


Для C++ создайте std::string из каждого аргумента, а затем сравните, используя operator==.

Для C используйте strcmp.

Для обоих проверьте argc >= 4 перед выполнением этой проверки.

person Steve Townsend    schedule 11.12.2010
comment
ссори, вы хотите сказать, что по умолчанию в C++ каждый (char *) трансформируется в std::string? Даже если мы точно не будем этого делать? - person mr. Vachovsky; 11.12.2010
comment
Сравнение строк обычно выполняется таким образом в C++, даже если вы начинаете с const char* в руке. strcmp является частью среды выполнения C - в C++ стандартная библиотека предоставляет std::string, чтобы облегчить боль и избежать распространенных ошибок, таких как переполнение буфера, забывание освободить память. - person Steve Townsend; 11.12.2010

Попробуйте это вместо этого:

#include <string>

int main( int argc, char  ** argv ) 
{
   if (argc >= 4 &&  std::string(argv[2]) == std::string(argv[3])) { ... }
   return 0;
}
person SingleNegationElimination    schedule 11.12.2010

Используйте strcmp, см. здесь:

Вы можете использовать класс string для чистого С++, если хотите, см. здесь:

person icyrock.com    schedule 11.12.2010

Да, это неправильно.

Вам нужно strcmp.

person Ryan Li    schedule 11.12.2010

Это совершенно правильный код, но он, вероятно, не делает того, что вы ожидаете. If condition будет истинным, если argv[2] и argv[3] начинаются с одной и той же буквы, потому что вы сравниваете первый символ обеих строк. Если вы хотите сравнить целые строки, используйте strcmp.

И еще 2 совета: Когда имеешь дело с аргументами, всегда проверяй их количество (argc). Когда вы выходите из основного потока, стандарт возвращает 0, если все в порядке.

person Klark    schedule 11.12.2010