本文目录一览:
求c语言实现strcmp功能的自编程序
#include stdio.h
int main()
{
int strcmp(char * p1,char * p2);
char * s1 = "hello world";
char s2[] = "hello_world";
char s3[] = "hello world";
if(strcmp(s1,s2)==0){
printf("String s1 and s2 are equal!\n");
}
else{
printf("String s1 and s2 are not equal!\n");
}
if(strcmp(s1,s3)==0){
printf("String s1 and s3 are equal!\n");
}
else{
printf("String s1 and s3 are not equal!\n");
}
getchar();
return 0;
}
//自己编写的一个比较字符串的函数
int strcmp(char * p1,char * p2)
{
for(;;)
{
if(*p1=='\0' *p2=='\0'){
return 0;
}
if(*p1!=*p2){
return (*p1 - *p2);
}
p1++;
p2++;
}
}
帮我写一个简易的strcmp函数(C语言)。
① c的strcmp简洁实现可以是这样的:
int strcmp(const char* s1, const char* s2)
{
while(*s1 (*s1==*s2))
s1++,s2++;
return *(const unsigned char*)s1-*(const unsigned char*)s2;
}
② strcmp的返回值可以有3种,即0, =0, 0 (任意一个数值),代表的含义分别是: str1 strcmp用的是二进制比较,意思是按字典顺序,比如: 字母a 字母 b;而a A。 (这是因为a的ascii码是97,而A的是65)。
理解了这个,上面的代码就好理解了。 while就是s1,s2从头到位一个一个字符的比较。如果s1为空,或者s1不等于s2,则中断循环 (s1不为空,s2为空,则是*s1 != *s2,退出循环)。返回值是循环中断时的字符(分别s1和s2对应的位置,*s1-*s2, 如果是上面说的 'a' - 'A', 那么返回的就是97-65=32),那么意味着a在A前面, strcmp 0。
之所以先转换成const unsigned char*再作减法,是由于c的char有三种: char, signed char 和unsigned char。 char就是'a'这样的, 而 signed char 则是-127~126之间的数值,而unsigned char则是0~255之间的一个值。 转换成unsigned char就是要“确保” 'a' --- 97。 你要不转换,也是可以的。
说明一点,很多c的lib实现,比如gnu c, 都是把结果处理成: -1, 0, 1, 而不是这个字符对应的ascii码的差值。
C语言strcmp函数是什么样的代码
1、cmp
是
compare,比较的缩写。
2、strcmp是c语言中头文件string.h(字符串函数)中定义的一个用于对两组字符串进行比较的函数,它的返回值是int类型。
假设有两组字符串cs和ct,当csct时,函数返回一个负数;当cs==ct时,函数返回0;当csct时,函数返回一个正数。
即:两个字符串自左向右逐个字符相比(按ascii值大小相比较),直到出现不同的字符或遇'\0'为止。如:"a""b"
,"a""a"
,"computer""compare"
,"comput""comp"
strcmp函数原型为:int
strcmp(const
char
*s1,const
char
*
s2);
C语言这段strcmp代码是什么意思
char a[20], b[20];
strcmp(a,b)是比较ab两个字符串的大小
如果strcmp(a,b)==0,说明ab字符串相等
如果strcmp(a,b)0,说明a字符串大于b字符串,也就是a的字母顺序应该在b后面
----比如"abcd""aabc", "bcde""abcd"
如果strcmp(a,b)0,说明a字符串小于b字符串,也就是a的字母顺序应该在b前面