c语言程序设计_C程序哪里错了(自己定义strlen strcat strcpy strcmp)

原问题:C程序哪里错了(自己定义strlen strcat strcpy strcmp)
分类:编程开发 > 最后更新时间:【2016-12-27 06:46:03】
问题补充:

#include<stdio.h>int lenstr(char);int cmpstr(char,char);char catstr(char,char);void main(){ char a[100],b[100],c[200]; int k; puts("输入字符串1:"); scanf("%s",a); puts("输入字符串2:"); scanf("%s",b); k=cmpstr(a,b); if(k>=0) c[200]=catstr(b,a); else c[200]=catstr(a,b); printf("新字符串是:%s,新字符串的长度是:%d",c,lenstr(c));}int lenstr(char *c){ int i,j=0; char *p; p=c; for(i=0;*(p+i)!='\0';i++) j++; return j;}int cmpstr(char *a,char *b){ int m,n,i,c; char *p,*q; p=a;q=b; m=lenstr(p);n=lenstr(q); for(i=0;i<100;i++) {if(*(p+i)==*(q+i)&&i<m&&i<n) continue; else if(*(p+m)==*(q+n)&&m==n) {c=0;break;} else if(*(p+i)>*(q+i)) {c=1;break;} else if(*(p+i)<*(q+i)) {c=-1;break;} }return c;}char catstr(char *a,char *b){ int i,c,j; char *p,*q; p=a;q=b; for(i=0;i<100;i++) {if(*a+i=='\0') {c=i;break;} } for(j=c;j<100;j++) *(a+j)=*(b+j-c); return a;}

最佳答案

程序语法上就有错

你声明的是

int lenstr(char ); //参数为字符

而定义的却是

int lenstr(char *c) //参数为指针

所有的三个函数都有这个问题

再有就是你的char catstr(char *a,char *b)返回应该是字串而非字符

且它不能这样赋值的的:c[200]=catstr(b,a);

另外你的实现复杂且有逻辑错

如lenstr这个可以简单地实现:

int lenstr(char *c)

{

int i=0;

while(*c++) i++;

return i;

}

而cmpstr也可以简单的实现

int cmpstr(char *a, char *b)
{
while(*a == *b)
{
if(*a == 0) return (0);
++a;
++b;
}
return (*a - *b);
}

追答:
我的catstrchar *catstr(char *a, char *b){ char *d; d = a; --a; while (*++a) ; while (*a++ = *b++) ; return(d);} 追答:
头上的定义char a[100], b[100], *c;而程序后面改 if(k >= 0) c= catstr(b, a); else c = catstr(a, b); printf("新字符串是:%s,新字符串的长度是:%d", c, lenstr(c));就可以得到你要的了
追问:
#include<stdio.h>int lenstr(char*);int cmpstr(char*,char*);void catstr(char*,char*);void main(){char a[100],b[100];int k;puts("输入字符串1:");scanf("%s",a);puts("输入字符串2:");scanf("%s",b);k=cmpstr(a,b);if(k>=0) {catstr(b,a); puts(b);printf("新字符串的长度是:%d",lenstr(b));}else {catstr(a,b); puts(a);printf("新字符串的长度是:%d",lenstr(a));}}int lenstr(char *c){int i=0;while(*c++) i++;return i;}int cmpstr(char *a,char *b){while(*a==*b){if(*a==0) return(0); ++a; ++b;}return(*a-*b);}void catstr(char *a,char *b){int i,c,j;char *p,*q;p=a;q=b;for(i=0;i<100;i++){if(*a+i=="\0"){c=i;break;}}for(j=c;j<100;j++)*(a+j)=*(b+j-c);}改成这样还是不行,没有报错,但是运行有问题,得不到结果
  • 追答:
    你的void catstr(char *a,char *b)要有返回值的,不能用void,要用char *
    最佳答案由网友  whoami1978  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    14

    分享到:

    其他回答

    暂无其它回答!