以下是在学习使用字符串处理函数时,一时心血来潮尝试着自己用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