strcmp
函数
strcmp
函数的学习
strcmp
是C语言中的一个标准库函数,用于比较两个C风格字符串(即以\0
为结尾的字符数组)。这个函数在<string.h>
头文件中定义。
函数原型
int strcmp(const char *s1, const char *s2);
参数
s1
:第一个要比较的 C 字符串。s2
:第二个要比较的 C 字符串。
返回值
该函数返回一个整数,表示两个字符串的比较结果:
- 如果
s1
和s2
是相同的,则返回0
。 - 如果
s1
字典排序上小于s2
,则返回一个负整数。 - 如果
s1
字典排序上大于s2
,则返回一个正整数。
函数功能
strcmp
函数用于比较两个字符串 s1
和 s2
。比较是基于字符的 ASCII 值进行的,按字典顺序逐字符比较两个字符串。如果两个字符串在某个位置上字符不同,函数就会根据这两个字符的 ASCII 值差异来决定返回值是正还是负。
参考代码
#include <stdio.h>
#include <string.h>
int main() {
char ch1[100];
char ch2[100];
gets(ch1);
gets(ch2);
int a = strcmp(ch1, ch2);
if (a > 0) {
printf("ch1>ch2\n");
} else if (a < 0) {
printf("ch1<ch2\n");
} else {
printf("ch1=ch2\n");
}
return 0;
}
strcmp
函数的模拟实现
参考代码
int my_strcmp(const char *c1, const char *c2) {
assert(c1 && c2);
while (*c1 == *c2) {
if (*c2 == '\0') {
return 0;
}
c1++;
c2++;
}
return *c1 - *c2;
}
int main() {
char ch1[] = {"apple"};
char ch2[] = {"iphone"};
int r = my_strcmp(ch1, ch2);
printf("%d\n", r);
return 0;
}
strnmp
函数
strnmp
函数的学习
strncmp
是 C 语言中的一个函数,用于比较两个 C 字符串的前 n 个字符。该函数在 <string.h>
头文件中定义。
函数原型
int strncmp(const char *str1, const char *str2, size_t n);
参数
str1
:第一个要比较的 C 字符串。str2
:第二个要比较的 C 字符串。n
:要比较的字符数。
返回值
该函数返回一个整数,表示两个字符串的比较结果:
- 如果
str1
在前n
个字符中小于str2
,则返回一个负整数。 - 如果
str1
在前n
个字符中等于 str2,则返回 0。
如果 str1 在前 n 个字符中大于 str2,则返回一个正整数。
功能
strncmp
函数用于比较两个字符串 str1
和 str2
的前 n
个字符。这个函数对于只需要比较字符串的一部分的情况非常有用,而不是比较整个字符串。例如,你可能只想检查两个字符串的开头是否匹配,或者你可能有一个具有特定格式的字符串,而你只对格式的一部分感兴趣。
示例
#include <stdio.h>
#include <string.h>
int main() {
char str1[15] = "abcdefghijklmn";
char str2[15] = "abcdefgopqrst";
int ret;
ret = strncmp(str1, str2, 5); // 只比较前5个字符
if(ret > 0) {
printf("str1 is greater than str2\n");
} else if(ret < 0) {
printf("str1 is less than str2\n");
} else {
printf("str1 is equal to str2\n");
}
return 0;
}
strncmp
函数的模拟实现
参考代码
int my_strncmp(const char *s1, const char *s2, size_t n) {
while(n--) {
if (*s1 != *s2)
return *(const unsigned char *)s1 - *(const unsigned char *)s2;
else if (*s1 == '\0')
return 0;
s1++;
s2++;
}
return 0;
}
int main() {
char str1[] = "Hello, World!";
char str2[] = "Hello, norld!";
char str3[] = "Hello, wniverse!";
printf("Comparing str1 and str2: %d\n", my_strncmp(str1, str2, 10)); // Should print 0
printf("Comparing str1 and str3: %d\n", my_strncmp(str1, str3, 10)); // Should print a negative number
return 0;
}