狮子王嘞 2021-05-12 00:44 采纳率: 100%
浏览 57
已采纳

定义的字符串比较函数,为什么输出的结果都是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;
}
  • 写回答

6条回答 默认 最新

  • 关注

    完整版代码

    #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;
    }
    

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 flask项目,怎么使用AJAX传数据库数据到echarts图表的data里,实现异步加载数据。
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题