C语言中strcmp函数是string库的常用函数。其原型代码和介绍如下:
1.先说一下这个函数的实现原理,向strcmp()函数中传入两个字符串(记为str1,str2).传入之后,通过把str1的各字母的ASCII码值和str2的各字母的ASCII码值进行比较。若str1>str2则返回正数,若str1=str2则返回0,否则,则返回负数。
2.下面实现代码:
3.整个函数的原型中得益于“(*str1!='\0')&&(*str1==*str2)”这一句的代码,因为这样当字符指针指向空,意味着字符串已经移动到最后了,比较结束,此时可以退出循环。而如果两个字符串不相等时,则此时函数也可以退出了。
扩展资料:
这个函数要注意一下几点:
①使用*(unsigned char*)str1而不是用*str1。这是因为传入的参数为有符号数,有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值,若不转化为无符号数这回在减法实现时出现错误。
②While循环中ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1,最后与上str1也可以换成str2,因为前面已经做了相减,无论哪个先为‘\0’都会退出。因为最后与上str1是为了判断str1是否结束,即是否为‘\0’。
③这个函数没有判断参数为NULL时的情况,所以当传入NULL时程序会崩溃。网上看别人说商业化代码都会在调用strcmp前先判断是否为NULL,所以可以不用判断NULL;我在VC6上测试string.h中的strcmp(NULL,NULL),程序也会崩溃。这里可以根据实际情况来决定。
参考资料来源:百度百科-strcmp函数。
#include<stdio.h>。
int strcmp(char *p1,char *p2)。
while(*p1||*p2)。
{
if(*p1!=*p2) 。
return(*p1-*p2);。
else
{
p1++;
p2++;
}
}
return 0;
void main()
char s1[20],s2[20],*p1,*p2; //字符串。
int k;
printf("请键入两个字符串:\n");。
scanf("%s %s",s1,s2);。
p1=s1;
p2=s2;
k=strcmp(p1,p2);。
printf("Result is:%d\n",k);。
其实你这里主要问题是不能接收到两个输入的字符串。
你这里的接受规则是输入两个字符串并用 , 号分隔,比如:abc,abc。
但是这里就有一个问题了!计算机怎么知道你输入的,号是你输入的第一个字符串的一个字符呢?还是你两个字符串的分隔?
所以当你输入abc,abc的时候计算识别你的第一个字符串是abc,abc。
第二个字符串为\n
所以你这里得到的始终是1
至于解决的办法:
让计算机识别你的分隔符号
那方法就很多了,比如 scanf("%s%s",a,b);输入的时候用空白符(空格,tab,回车键)相间隔。
LZ问题不是很明确,因为strcmp()本身是字符串处理函数,不知道你是想问这个函数的运用方法还是自己想编一个可以实现此功能的被调函数。两个都跟你说了吧。
1.关于strcmp()作为字符串处理函数的运用。
1)在运用时首先要在源程序开始时加上#include<string.h>头文件。
2)函数使用格式:
strcmp(str1,str2);。
strcmp("china","korea");。
strcmp(str1,"beijing");。
以上三种格式均可以使用。
3)规则:对两个字符串自左向右逐个字符相比,按ASCII码值的大小进行比较。直到出现不同的字符或遇到'\0'为止。如果字符全部相同则认为相同,若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
4)返回值:若相等,函数返回值为0;若STR1>STR2则返回一个正整数;若STR1<STR2返回一个负整数。
5)注意:
在c语言中两个字符串的比较不能用:
if(str1==str2) printf("yes");。
而只能用:
if(strcmp(str1,str2)==0) printf("yes");。
2.如果你想实现函数的调用。
1)建议你的函数名改一下,最好不要和系统已经有的函数名冲突。
2)主调函数与被调函数之间无非就是传值。
这是我刚才编的函数调用的方法:
#include <stdio.h>。
strcmp(char str1[],char str2[])。
while((*str1!='\0')&&(*str2!='\0'))。
{
if(*str1==*str2)。
{
str1++;
str2++;
}
else
break;
}
if((*str1=='\0')||(*str2=='\0'))。
printf("yes\n");。
else
printf("no\n");。
void main()
char str1[]="kakashi";。
char str2[]="naruto";。
strcmp(str1,str2);。
希望我的回答能对你有所帮助。
首先 无条件的给bad赋值为 0;
其次,你的判断条件有问题 条件改为 (*p == *q )&&(*p != ‘0’)&&(*q!=‘0')此时,进入循环 执行:p++,q++;
while()循环外面 执行 求bad的语句;
建议!!
附代码:
#include<stdio.h>。
int str(char* p1,char* p2)。
{
while(*p1 && *p2 && *p1 == *p2)。
{
p1++;。
p2++;。
} 。
return *p1 - *p2;。
}
int main(void)
{
char a[100] = "abcdefg";。
char b[100] = "abcdasd";。
int ret = 0;。
ret = str(a,b);。
printf("%d\n",ret);。
return 0;
}