跳到主要内容

C++ strcmp() 字符串比较函数

C++ 中的 strcmp() 函数比较两个以空字符结尾的字符串(C-字符串)。比较是按照字典顺序进行的。它定义在 cstring 头文件中。

示例

#include <cstring>
#include <iostream>
using namespace std;

int main() {
char str1[] = "Megadeth";
char str2[] = "Metallica";

// 按字典顺序比较 str1 和 str2
int result = strcmp(str1, str2);

cout << result;

return 0;
}

// 输出:-1

strcmp() 语法

strcmp() 的语法是:

strcmp(const char* lhs, const char* rhs);

其中,

  • lhs 代表左侧字符串
  • rhs 代表右侧字符串

strcmp() 参数

strcmp() 函数接受以下参数:

  • lhs - 需要比较的 C-字符串指针
  • rhs - 需要比较的 C-字符串指针

strcmp() 返回值

strcmp() 函数返回:

  • 正值,如果 lhs 中第一个不同的字符大于 rhs 中相应的字符。
  • 负值,如果 lhs 中第一个不同的字符小于 rhs 中相应的字符。
  • 0,如果 lhsrhs 相等。

strcmp() 原型

定义在 cstring 头文件中的 strcmp() 原型是:

int strcmp( const char* lhs, const char* rhs );
  • strcmp() 按字典顺序比较 lhsrhs 的内容。
  • 结果的符号是 lhsrhs 中第一对不同字符之间差异的符号。

strcmp() 未定义行为

如果:

  • lhsrhs 其中任何一个不指向以空字符结尾的字符串

那么 strcmp() 的行为是未定义的。

示例 1:C++ strcmp()

#include <cstring>
#include <iostream>
using namespace std;

int main() {
char str1[] = "Megadeth";
char str2[] = "Metallica";

// 返回 -1 因为按字典顺序 "Megadeth" < "Metallica"
int result = strcmp(str1, str2);

cout << "比较 " << str1 << " 和 " << str2 << ": " << result << endl;

// 返回 1 因为按字典顺序 "Metallica" > "Megadeth"
result = strcmp(str2, str1);

cout << "比较 " << str2 << " 和 " << str1 << ": " << result << endl;

// 返回 0 因为按字典顺序 "Megadeth" = "Megadeth"
result = strcmp(str1, str1);

cout << "比较 " << str1 << " 和 " << str1 << ": " << result;

return 0;
}

输出

比较 Megadeth 和 Metallica: -1
比较 Metallica 和 Megadeth: 1
比较 Megadeth 和 Megadeth: 0

示例 2:在自定义函数中使用 strcmp()

#include <cstring>
#include <iostream>
using namespace std;

// 函数用于显示 strcmp() 的结果
void display(char *lhs, char *rhs) {

// 比较 display() 参数 lhs 和 rhs
int result = strcmp(lhs, rhs);

if (result > 0)
cout << rhs << " 在 " << lhs << " 前" << endl;
else if (result < 0)
cout << rhs << " 在 " << lhs << " 后" << endl;
else
cout << lhs << " 和 " << rhs << " 相同" << endl;
}

int main() {
char str1[] = "Armstrong";
char str2[] = "Army";

// lhs = str1, rhs = str2
display(str1, str2);

// lhs = str2, rhs = str1
display(str2,

str1);

// lhs = str1, rhs = str1
display(str1, str1);

// lhs = str2, rhs = str2
display(str2, str2);

return 0;
}

输出

Army 在 Armstrong 后
Armstrong 在 Army 前
Armstrong 和 Armstrong 相同
Army 和 Army 相同