定义的字符串比较函数,为什么输出的结果都是0?此外,下面的程序还有哪些地方可以改进?

以下是在学习使用字符串处理函数时,一时心血来潮尝试着自己用C语言编译这些函数。编译完成后感觉有很多不好的地方,于是来向前辈们请教,希望得到指点。(其中字符串比较函数不知道哪里出错了,一直输出的是0)

#include<stdio.h>
//在编译时遇到了一个错误:return makes pointer from integer without a cast 即 返回不进行强制转换,使从整数的指针。 
char one_cat(char *a,char *b)//字符串连接函数                                                     ----- 1
{
	int i=0,j=0;
	while(a[i]!='\0'){i++;}
	while(b[j]!='\0'){a[i++]=b[j++];}
	printf("%s",a);
}
char two_cpy(char *a,char *b) //字符串复制函数 ,此函数不严谨,因为a数组的空间可能比b数组的空间小。 ----- 2
{
	int i,j=0;
	while(b[j]!='\0'){a[i]=b[j];i++,j++;}
	printf("%s",a);	
}
char three_cmp(char *a,char *b) //字符串比较函数                                                ----- 3   
{
	int i=0;
    while((a[i]=b[i])&&a[i]!='\0'){i++;} 
    if (a[i]-b[i]==0){printf("0");}
    else if(a[i]-b[i]>0){printf("1");}
    else {printf("-1");}
}
char four_len(char *a)//测字符串长度  the reason of warn:return(n)->> return 0;                 ----- 4
{
	int n;n=0;
	for(;a[n]!='\0';)
	{
		n++;
}
    printf("字符串长度为%d",n);
}
char five_lwr(char *a)//大写转为小写 ,ok                                                        ----- 5
{
	int i,j;
	while(a[i]!='\0')
	{
	if(a[i]>=60&&a[i]<=90) {a[i]=a[i]+32;printf("%c",a[i]);}
	else if(a[i]>=97&&a[i]<=122){printf("%c",a[i]);}
	else {printf("该字符不是大小写字母");}
	i++;
    }
}
char six_upr(char *a)//小写转为大写 ,ok                                                         ----- 6
{
		int i,j;
	while(a[i]!='\0')
	{
	if(a[i]>=60&&a[i]<=90) {printf("%c",a[i]);}
	else if(a[i]>=97&&a[i]<=122){a[i]=a[i]-32;printf("%c",a[i]);}
	else {printf("该字符不是大小写字母");}
	i++;
    }
}
int main()
{
	char a[15]="Hello";
	char b[7]="World!";
	one_cat(a,b);
	two_cpy(a,b);
    three_cmp(a,b);
    four_len(a);
    five_lwr(a);
    six_upr(b);
	printf("%s",a);
	return 0;
}

 

完整版代码

#include<stdio.h>
//在编译时遇到了一个错误:return makes pointer from integer without a cast 即 返回不进行强制转换,使从整数的指针。
void one_cat(char *a,char *b)//字符串连接函数                                                     ----- 1
{
	int i=0,j=0;
	while(a[i]!='\0'){i++;}
	while(b[j]!='\0'){a[i++]=b[j++];}
	printf("%s",a);
}

// 字符串复制最后的 \0 也要一起复制
void two_cpy(char *a,char *b)
{
	int i=0;
    do {
        a[i]=b[i];
        i++;
    }
	while(b[i-1]!='\0');
	printf("%s",a);
}
void three_cmp(char *a,char *b) //字符串比较函数                                                ----- 3
{
	int i=0;
    while((a[i]==b[i])&&a[i]!='\0'){i++;}
    if (a[i]-b[i]==0){printf("0");}
    else if(a[i]-b[i]>0){printf("1");}
    else {printf("-1");}
}
void four_len(char *a)//测字符串长度  the reason of warn:return(n)->> return 0;                 ----- 4
{
	int n;n=0;
	for(;a[n]!='\0';)
	{
		n++;
    }
    printf("字符串长度为%d",n);
}
void five_lwr(char *a)//大写转为小写 ,ok                                                        ----- 5
{
	int i=0;
	while(a[i]!='\0')
	{
	if(a[i]>='A'&&a[i]<='Z') {a[i]=a[i]+32;}
	i++;
    }
	printf("%s",a);
}
void six_upr(char *a)//小写转为大写 ,ok                                                         ----- 6
{
	int i=0;
	while(a[i]!='\0')
	{
	if(a[i]>='a'&&a[i]<='z') {a[i]=a[i]-32;}
	i++;
    }
	printf("%s",a);
}
int main()
{
	char a[15]="Hello";
	char b[7]="World!";
    three_cmp(a,b);
printf("\n");
	one_cat(a,b);
printf("\n");
	two_cpy(a,b);
printf("\n");
    three_cmp(a,b); //复制之后相等了
printf("\n");
    four_len(a);
printf("\n");
    five_lwr(a);
printf("\n");
    six_upr(b);
printf("\n");
	printf("%s",a);
	return 0;
}

    while((a[i]==b[i])&&a[i]!='\0'){i++;}

a[i]==b[i] 比较相等是两个=,你写一个=就成赋值了

 

 

字符串复制最后的 \0 也要一起复制

char two_cpy(char *a,char *b) 
{
	int i=0;
    do {
        a[i]=b[i];
        i++;
    }
	while(b[i-1]!='\0');
	printf("%s",a);
}

 大小写转换函数也不对

char five_lwr(char *a)//大写转为小写 ,ok                                                        ----- 5
{
	int i=0;
	while(a[i]!='\0')
	{
	if(a[i]>='A'&&a[i]<='Z') {a[i]=a[i]+32;}
	i++;
    }
	printf("%s",a);
}
char six_upr(char *a)//小写转为大写 ,ok                                                         ----- 6
{
	int i=0;
	while(a[i]!='\0')
	{
	if(a[i]>='a'&&a[i]<='z') {a[i]=a[i]-32;}
	i++;
    }
	printf("%s",a);
}

 

字符串比较函数中while((a[i]=b[i])&&a[i]!='\0')中a[i]=b[i],应该是a[i]==b[i],两个==,你漏写了一个。如有帮助,望采纳,谢谢。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

代码缩进不规范,望采纳,不懂的可以关注私信我。

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y