如何在函数中正确使用strcmp

时间:2014-09-10 05:19:42

标签: c++ string pointers compare strcmp

我很难理解如何使用strcmp。似乎我对发送到equals()函数的字符串所做的更改不会影响测试1a - 1d的结果。函数调用前的感叹号的目的是什么?这个程序的目的是比较两个字符串,如果字符串长度和大小相同,将显示“正确”。以下代码由我的教授提供。我只能改变equal()函数和函数原型中的内容。

    #include <iostream>
    #include <cstring>
    #include <cctype>

    using std::cin;
    using std::cout;
    using std::endl;

bool equals(const char*, const char*);

int main()
   {

   // Tests 1a - 1d: Test the equals() function
   cout << "Test 1a: ";
   if (equals("catapult", "catapult"))
      cout << "correct\n";
   else
      cout << "incorrect\n";

   cout << "Test 1b: ";
   if (!equals("catapult", "catamaran"))
      cout << "correct\n";
   else
      cout << "incorrect\n";

   cout << "Test 1c: ";
   if (!equals("cat", "catamaran"))
      cout << "correct\n";
   else
      cout << "incorrect\n";

   cout << "Test 1d: ";
   if (!equals("catapult", "cat"))
      cout << "correct\n";
   else
      cout << "incorrect\n";

   cout << endl;
return 0;
}

bool equals (const char* str1, const char* str2)
{
    if (strcmp(str1, str2) == 0)
        return true;

    return false;

}

1 个答案:

答案 0 :(得分:0)

感叹号用作一元前缀运算符时,是逻辑非(或否定)运算符。

所以

if (!equals("catapult", "catamaran"))

应该被理解为好像equals("catapult","catamaran")的否定是真的, 换句话说,如果equals("catapult","catamaran")为假。

请注意,否定运算符!具有优先级而不是函数调用。因此,您的!equals("catapult","catamaran")!(equals("catapult","catamaran"))

具有相同的含义

顺便说一句,如果你想用真正的C ++编码,你应该学习std::string。您应该阅读strcmp的文档,另请参阅strcasecmp

最后,您应该编译所有警告和调试信息(例如g++ -Wall -g)并使用调试器(gdb)逐步运行您的程序。