1、使用标准库函数 strcmp
strcmp
是 C 标准库中的函数,用于比较两个字符串。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello";
char str2[] = "world";
int result = strcmp(str1, str2);
if (result == 0) {
printf("两个字符串相等\n");
} else if (result < 0) {
printf("str1 小于 str2\n");
} else {
printf("str1 大于 str2\n");
}
return 0;
}
2、使用标准库函数 strncmp
strncmp
可以指定要比较的字符数目。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello";
char str2[] = "helicopter";
int result = strncmp(str1, str2, 3);
if (result == 0) {
printf("前三个字符相等\n");
} else if (result < 0) {
printf("str1的前三个字符小于str2的前三个字符\n");
} else {
printf("str1的前三个字符大于str2的前三个字符\n");
}
return 0;
}
3、手动实现字符串比较
可以手动实现字符串比较逻辑,而不使用标准库函数。
#include <stdio.h>
int compareStrings(const char *str1, const char *str2) {
while (*str1 && (*str1 == *str2)) {
str1++;
str2++;
}
return *(unsigned char *)str1 - *(unsigned char *)str2;
}
int main() {
char str1[] = "hello";
char str2[] = "hello";
int result = compareStrings(str1, str2);
if (result == 0) {
printf("字符串相等\n");
} else if (result < 0) {
printf("str1 小于 str2\n");
} else {
printf("str1 大于 str2\n");
}
return 0;
}
4、忽略大小写比较
通过将每个字符转换为小写来比较两个字符串,可以手动实现忽略大小写的字符串比较。
#include <stdio.h>
#include <ctype.h> // 包含 tolower 函数
#include <string.h> // 包含 strlen 函数
int caseInsensitiveCompare(const char *str1, const char *str2) {
while (*str1 && *str2) {
char c1 = tolower((unsigned char)*str1);
char c2 = tolower((unsigned char)*str2);
if (c1 != c2) {
return c1 - c2;
}
str1++;
str2++;
}
return (unsigned char)*str1 - (unsigned char)*str2;
}
int main() {
char str1[] = "Hello";
char str2[] = "hello";
int result = caseInsensitiveCompare(str1, str2);
if (result == 0) {
printf("忽略大小写字符串相等\n");
} else if (result < 0) {
printf("忽略大小写 str1 小于 str2 \n");
} else {
printf("忽略大小写 str1 大于 str2\n");
}
return 0;
}
5、比较字符串指针
当比较字符串指针时,实际上是在比较它们的地址,而不是内容。这在某些情况下是有用的。
#include <stdio.h>
int main() {
char str1[] = "hello";
char str2[] = "hello";
char *ptr1 = str1;
char *ptr2 = str2;
if (ptr1 == ptr2) {
printf("指针相等\n");
} else {
printf("指针不相等\n");
}
// To actually compare content
if (strcmp(ptr1, ptr2) == 0) {
printf("字符串相等\n");
} else {
printf("字符串不相等\n");
}
return 0;
}