请问错在哪了?用一个函数实现两个字符串的比较,即自己写一个strcmp函数,
/*6、用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:intstrcmp(char*p1,char*p2);设p1指向字符串s1,p2指向字符...
/*6、用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp (char * p1, char * p2);
设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为 0, 如果sl≠s2,
则返回它们二者第一个不相同字符的ASCII码差值(如"BOY"与"BAD"的第二个字母不相同,"O"与"A"之差为79-65=14);如果sl>s2,则输出正值;
如果sl<s2则输出负值。
两个字符串s1、s2由main函数输入,并输出字符串比较结果。
*/
#include <stdio.h>
int strcmp (char *p1, char *p2)
{
int i,j=0,f;
for(i=0;*p1!='\0'||*p2!='\0';i++)
{
if(p1[i]==p2[i])
j++;
}
if(j==i)
f=0;
else
{
for(i=0;*p1!='\0'||*p2!='\0';i++)
{
if(p1[i]!=p2[i])
{
f=p1[i]-p2[i];
break;
}
}
}
return(f);
}
void main()
{
char s1[100],s2[100];
int f1;
printf("请输入一串字符\n");
gets(s1);
printf("请输入另一串字符\n");
gets(s2);
f1=strcmp(&s1,&s2);
printf("%d",f1);
} 展开
设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为 0, 如果sl≠s2,
则返回它们二者第一个不相同字符的ASCII码差值(如"BOY"与"BAD"的第二个字母不相同,"O"与"A"之差为79-65=14);如果sl>s2,则输出正值;
如果sl<s2则输出负值。
两个字符串s1、s2由main函数输入,并输出字符串比较结果。
*/
#include <stdio.h>
int strcmp (char *p1, char *p2)
{
int i,j=0,f;
for(i=0;*p1!='\0'||*p2!='\0';i++)
{
if(p1[i]==p2[i])
j++;
}
if(j==i)
f=0;
else
{
for(i=0;*p1!='\0'||*p2!='\0';i++)
{
if(p1[i]!=p2[i])
{
f=p1[i]-p2[i];
break;
}
}
}
return(f);
}
void main()
{
char s1[100],s2[100];
int f1;
printf("请输入一串字符\n");
gets(s1);
printf("请输入另一串字符\n");
gets(s2);
f1=strcmp(&s1,&s2);
printf("%d",f1);
} 展开
展开全部
错的地方多了!自己要细心点检查~
1)、 f1=strcmp(&s1,&s2); 这地方传值是地址,s1和s2就是地址为什么还要给取地址呢;
2)、printf("%d",f1); 最好要在后面加换行符号 '\n';
3)、 for(i=0;*p1!='\0'||*p2!='\0';i++) 指针比较不是这样的 ,只需要直接判断是否为空就行了,如:*p1 != NULL; 而且在这也不是用 || (或)这个符号,应该使用 &&;
4)、for(i=0;*p1!='\0'||*p2!='\0';i++) for循环中间的条件,是i的范围,不是你那样写的!
5)、子函数中逻辑不分明,有点混乱!代码不够简明!
6)、函数头不要用关键字strcmp这样的,会右冲突;
下面是我对你的代码进行的简单修改:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int strcmp_a(char *p1, char *p2)
{
int i = 0, j = 0, f, sum;
if(p1 != NULL && p2 != NULL){
while(1){
if(p1[i] == p2[i]){
i++; j++;
}else
break;
}
}
if(strlen(p1) >= strlen(p2))
sum = strlen(p1);
else
sum = strlen(p2);
if(i < sum)
f = p1[i] - p2[i];
else
f = 0;
return f;
}
void main()
{
char s1[100],s2[100];
int f1;
printf("请输入一串字符\n");
gets(s1);
printf("请输入另一串字符\n");
gets(s2);
f1=strcmp_a(s1,s2);
printf("%d\n",f1);
}
1)、 f1=strcmp(&s1,&s2); 这地方传值是地址,s1和s2就是地址为什么还要给取地址呢;
2)、printf("%d",f1); 最好要在后面加换行符号 '\n';
3)、 for(i=0;*p1!='\0'||*p2!='\0';i++) 指针比较不是这样的 ,只需要直接判断是否为空就行了,如:*p1 != NULL; 而且在这也不是用 || (或)这个符号,应该使用 &&;
4)、for(i=0;*p1!='\0'||*p2!='\0';i++) for循环中间的条件,是i的范围,不是你那样写的!
5)、子函数中逻辑不分明,有点混乱!代码不够简明!
6)、函数头不要用关键字strcmp这样的,会右冲突;
下面是我对你的代码进行的简单修改:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int strcmp_a(char *p1, char *p2)
{
int i = 0, j = 0, f, sum;
if(p1 != NULL && p2 != NULL){
while(1){
if(p1[i] == p2[i]){
i++; j++;
}else
break;
}
}
if(strlen(p1) >= strlen(p2))
sum = strlen(p1);
else
sum = strlen(p2);
if(i < sum)
f = p1[i] - p2[i];
else
f = 0;
return f;
}
void main()
{
char s1[100],s2[100];
int f1;
printf("请输入一串字符\n");
gets(s1);
printf("请输入另一串字符\n");
gets(s2);
f1=strcmp_a(s1,s2);
printf("%d\n",f1);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询