用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为 :int strcmp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为 :int strcmp相关的知识,希望对你有一定的参考价值。

写一个函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char*p1,char*p2)
设p1指向字符串s1,p2指向字符串s2, 要求:当s1=s2时,返回0,s1<>s2时,返回它们二者的第一个不同字符的ASCII码;如果s1>s2,输出正值,如果s1<s2,则输出负值#include<stdio.h>
#include<string.h>
int strcmp(char *p1, char *p2)
int bad;
while(*p1!=*p2)
bad=p1-p2;
p1++;
p2++;

return bad;
void main()
char a[100],b[100],;
int m;
printf("Input string a:\n");
gets(p1);
printf("Input string b:\n");
gets(p2);
m=strcmp(a,b);
printf("The number is:\n");
printf("%d\n",m);
请问有什么错啊跪求答复

首先 无条件的给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;

参考技术A 如果第一个字符就相等返回什么呢?你应该把bad初始化为0
如果第一个字符就不同,那么就可以判定字符串的大小了,就不能继续循环了,而且你的循环你也没判断字符串末尾
int strcmp(char *p1, char* p2)
while (*p1 && *p2 && *p1 == *p2)
p1++; p2++;

return *p1 - *p2;
参考技术B bad=p1-p2;还是 bad=*p1-*p2; 参考技术C strcmp没反括号 参考技术D 你觉得你的这个程序是可以编译的吗?
你大括号都没有匹配上啊。

求教,c语言 写一个函数,实现两个字符串的比较。即自己写一个strcmp函数

#include<stdio.h>
int main()
int strcmp(char *p1,char *p2);
int m;
char str1[20],str2[20],*p1,*p2;
printf("input two strings:\n");
scanf("%s",str1);
scanf("%s",str2);
p1=&str1[0];
p2=&str2[0];
m=strcmp(p1,p2);
printf("result:%d,\n",m);
return 0;


int strcmp(char *p1,char *p2)
int i;
i=0;
while(*(p1+i)==*(p2+i))
if (*(p1+i++)=='\0') return(0);
return(*(p1+i)-*(p2+i));


这个后面的
while(*(p1+i)==*(p2+i))
if (*(p1+i++)=='\0') return(0)
return(*(p1+i)-*(p2+i));
是什么意思

参考技术A 首先要理解指针的含义,即*p代表的是p[0] *(p+1)代表的是p[1],

在这个基础上,我们来看上面两行代码
while(*(p1+i)==*(p2+i))
if (*(p1+i++)=='\0') return(0);
注意到这一个while,也就是说这一段的作用是找到两个字符串第一个不相等的地方的位置,如果找到了‘\0’,即找到了字符串的最后一位的话,就return 0,表示两个字符串相等,当两个字符串不相等退出while之后,i代表的就是他们第一个不相等的位置return(*(p1+i)-*(p2+i)); 将其差return出去如果大于0,则表示前字符串大,小于零表示后字符串大。

ps:我觉得第二个if判断有点片面,还要判断p2是不是查到了'\0'追问

这个
while(*(p1+i)==*(p2+i))
if (*(p1+i++)=='\0') return(0);
翻译过来的话要怎么理解?

当p1[i]等于p2[i]时执行下列循环;

如果p1[I++]等于‘\0’时则结束

是这样么?

追答

对,这两句话的作用是找到两个字符串第一个不相同的字符的位置,翻译过来的话

如果 两个字符串第i个字符相等的话
如果 第i个字符是最后一个字符 return 0;

如果不是 继续判断下一个字符

如果不相等,退出while循环

本回答被提问者采纳

以上是关于用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为 :int strcmp的主要内容,如果未能解决你的问题,请参考以下文章

C++ 写一个函数,实现两个字符串的比较,即自己写一个strcmp函数

写一些函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为int strcmp(c

写一个函数,实现两个字符串的比较,即自己编写strcmp函数

用函数实现对两个字符串str1和str2的比较:strcmp (str1,str2)

c语言编程 写一个函数,实现两个字符串的比较,即写一个类似于strcmp功能的函数。急求,谢谢!

用C/C++实现字符串的创建,并进行查找与替换