头文件 | 原型 | 说明 | 返回值 |
---|---|---|---|
#include<stdio.h> | int strcmp(const char *s1, const char *s2) | 比较s1指向的字符串和s2指向的字符串的大小关系(从第一个字符开始逐一比较,当出现不同的字符时,便可确定这些字符的大小关系)。 | 若s1 和 s2相等,则返回0;若s1 大于 s2,则返回正整数值;若s1 小于 s2,则返回负整数值。 |
#include <stdio.h>
#include <string.h>
int main(void){
char str[] = "1";
char *p = "2";
if(strcmp(str, p) == 0){
puts("str 等于 *p");
}else if(strcmp(str, p) > 0){
puts("str 大于 *p");
}else{
puts("str 小于 *p");
}
return 0;
}
运行结果:
strcmp函数实现:
int strcmp(const char *s1, const char *s2){
while (*s1 == *s2){
if(*s1 == '\0'){
return 0;
}
s1++;
s2++;
}
return (unsigned char)*s1 - (unsigned char)*s2;
}
strncmp函数指定前n个字符串进行比较
头文件 | 原型 | 说明 | 返回值 |
---|---|---|---|
#include<stdio.h> | int strncmp(const char *s1, const char *s2, size_t n) | 比较s1指向的字符的数组和s2指向的字符的数组的前n个字符的大小关系。 | 若s1 和 s2相等,则返回0;若s1 大于 s2,则返回正整数值;若s1 小于 s2,则返回负整数值。 |
#include <stdio.h>
#include <string.h>
int main(void){
char str[] = "423";
char *p = "192";
if(strncmp(str, p, 2) == 0){
puts("str 等于 *p");
}else if(strncmp(str, p, 2) > 0){
puts("str 大于 *p");
}else{
puts("str 小于 *p");
}
return 0;
}
运行结果:
strncmp函数实现:
int strncmp(const char *s1, const char *s2, size_t n){
while (n && *s1 && *s2){
if(*s1 != *s2){
return (unsigned char)*s1 - (unsigned char)*s2;
}
s1++;
s2++;
n--;
}
if(!n){
return 0;
}
if(*s1){
return 1;
}
return -1;
}
总结:
- strcmp 函数 和 strncmp函数对字符串大小的判断,是基于字符编码进行的。字符编码表示字符的值,它依赖于该环境中采用的字符编码体系。
- strcmp 函数 和 strncmp函数不能进行具有可移植性(不依赖于运行环境中采用字符编码等)的字符串的比较。
- strncmp函数开头n个字符内没有null字符也可以进行比较(不是字符串也可以进行比较)。