【发布时间】:2014-11-03 15:40:44
【问题描述】:
我很难理解如何使用 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;
}
【问题讨论】:
-
这是在 c++ 中正确使用
strcmp的方法:第 1 步:将每次出现的char const*替换为std::string,第 2 步:将每次出现的strcmp替换为==。 -
!是逻辑非运算符,它将后面的false更改为true,或将true更改为false。所以!true==false和!false==true。!equals(x, y)表示“not (equals(x, y))”或 - 用英语解释 - “x 不等于 y”。 -
"如果字符串的长度和大小写相同" - 这不是
strcmp测试的内容...要比较相等,它们的长度必须相同,并且每个字符必须完全匹配...仅仅使用相同的大写或小写是不够的。 -
运行您的程序 - 它们都打印“正确”(tested on ideone.com here)... 这是因为每个测试都设计为根据已知的参数相等或不相等使用
equals或!equals。 -
严格来说它不是重复的,因为它适用于 C,而不是 C++,但问题 Testing string equality issue 有一个答案,使得使用
strcmp()非常容易。当然,既然我写了答案,我是有偏见的,但我认为它确实让生活更轻松。
标签: c++ string pointers compare strcmp