1. strcmp()
函数
strcmp()
是一个 C 语言中的字符串比较函数,定义在 <cstring>
头文件中(C 语言中是 <string.h>
)。它用于比较两个 C 风格字符串(char
数组)。
原理
strcmp()
按照ASCII 码值比较两个字符串的每个字符,直到找到不同的字符或者遇到'\0'
终止符。- 返回值
- 若
str1 == str2
(两个字符串完全相同),返回0
。 - 若
str1 < str2
(ASCII 码值顺序),返回 负数。 - 若
str1 > str2
(ASCII 码值顺序),返回 正数。
- 若
用法
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result == 0)
cout << "两个字符串相等" << endl;
else if (result < 0)
cout << "str1 小于 str2" << endl; // 'a' 在 ASCII 码表中小于 'b'
else
cout << "str1 大于 str2" << endl;
return 0;
}
输出
str1 小于 str2
解析
strcmp("apple", "banana")
:- 'a' (ASCII 97) < 'b' (ASCII 98),因此
strcmp()
返回负值。
- 'a' (ASCII 97) < 'b' (ASCII 98),因此
2. substr()
函数
substr()
是 C++ std::string
类的成员函数,属于 C++ STL,定义在 <string>
头文件中。它用于从字符串中提取一个子字符串。
原理
- 语法:
string substr(size_t pos = 0, size_t len = npos) const;
- 参数
pos
:子串的起始位置(从0
开始)。len
:子串的长度(默认string::npos
,表示从pos
开始到字符串末尾)。
用法
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "programming";
// 提取子字符串
string sub1 = str.substr(0, 3); // 从索引 0 开始,长度 3
string sub2 = str.substr(4, 4); // 从索引 4 开始,长度 4
string sub3 = str.substr(7); // 从索引 7 开始到末尾
cout << "sub1: " << sub1 << endl; // "pro"
cout << "sub2: " << sub2 << endl; // "gram"
cout << "sub3: " << sub3 << endl; // "ming"
return 0;
}
输出
sub1: pro
sub2: gram
sub3: ming
常见用途
- 提取后缀
string str = "playing"; if (str.substr(str.length() - 3) == "ing") { cout << "这个单词以 ing 结尾" << endl; }
- 删除后缀
str = str.substr(0, str.length() - 3); // 移除 ing
两者对比
函数 | 适用场景 | 返回类型 | 主要用途 |
---|---|---|---|
strcmp() | C 风格字符串 (char[] ) | int | 比较两个字符串的大小 |
substr() | C++ std::string | std::string | 提取子字符串 |
总结
strcmp()
适用于 C 语言的char
数组,用于字符串比较。substr()
适用于 C++std::string
,用于提取或删除子字符串。- 现代 C++ 推荐使用
std::string
及substr()
,除非必须使用char
数组。
🚀 如果写 C++ 代码,建议用 std::string
,避免 strcmp()
带来的 C 风格字符串管理问题。