我很难理解如何使用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;
}
答案 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
)逐步运行您的程序。