永发信息网

C语言,请高手帮忙

答案:2  悬赏:0  手机版
解决时间 2021-04-15 15:34
  • 提问者网友:黑米和小志
  • 2021-04-15 05:25
编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr()用于统计字符串的长度。编写函数cmpStr()用于判断两个字符串的大小。要求:(1)不允许使用字符处理库函数。(2)在主函数以初始化的方式输出两个字符串str1、str2。调用函数lenStr()计算字符串的长度。(3)调用函数cmpStr()判断两个字符串的大小,如果str1大于等于str2调用函数catStr进行两个字符串的连接,将str1连接在str2后,否则将str2连接在str1后,调用函数lenStr()统计连接后的字符串长度。(4)在主函数中输出量个原始字符串和各自长度以及处理后字符串及其长度。 将上题中catStr、lenStr()、cmpStr()三个字符串处理函数均改写为采用指针实现其过程
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-04-15 06:40

#include<stdio.h>
#define MAX 20
int n1,n2;
void lenstr(char *p1,char *p2)
{
int i;
printf("str1 lenstr:");
for (i=0;*(p1+i)!='\0';i++);
printf("%d\n",n1=i);
printf("str2 lenstr:");
for (i=0;*(p2+i)!='\0';i++);
printf("%d\n",n2=i);
}
void catstr(char *p1,char *p2)
{
int i=0,j;
for (i=0;*(p1+i)!='\0';i++);
for (j=0;*(p2+j)!='\0';j++)
p1[i+j]=p2[j];
p1[j+i]='\0';
printf("连接后的字符为:");
puts(p1);
for (i=0;p1[i]!='\0';i++) ;
printf("连接后的字符串长为:%d\n",i);
printf("\n");
}
void cmpstr(char *p1,char *p2)
{
int i;
int n;
int x=-1;
n1>n2?n=n1:n=n2;
for (i=0;i<n;i++)
{
if (p1[i]>p2[i]) {x=1;break;}
else if(*(p1+i)==*(p2+i) && i+1==n1 && n1==n2) {x=0;}
else {x=-1;break;}
}
if (x==1) {printf("str1字符串大于str2\n");catstr(p1,p2);}
else if (x==0) {printf("str1与str2相等\n");catstr(p1,p2);}
else if (x==-1) {printf("str2字符串大于str1\n");catstr(p2,p1);}
}


void main()
{
char str1[MAX],str2[MAX];
printf("str1 Input:");
gets(str1);
printf("str2 Input:");
gets(str2);
lenstr(str1,str2);
cmpstr(str1,str2);
} for (i=0;*(p1+i)!='\0';i++);
for (j=0;*(p2+j)!='\0';j++)
p1[i+j]=p2[j];
p1[j+i]='\0';
printf("连接后的字符为:");
puts(p1);
for (i=0;p1[i]!='\0';i++) ;
printf("连接后的字符串长为:%d\n",i);
printf("\n");
}
void cmpstr(char *p1,char *p2)
{
int i;
int n;
int x=-1;
n1>n2?n=n1:n=n2;
for (i=0;i<n;i++)
{
if (p1[i]>p2[i]) {x=1;break;}
else if(*(p1+i)==*(p2+i) && i+1==n1 && n1==n2) {x=0;}
}
if (x==-1) {printf("str1字符串大于str2\n");catstr(p1,p2);}
else if (x==0) {printf("str1与str2相等\n");catstr(p1,p2);}
else {printf("str2字符串大于str1\n");catstr(p2,p1);}
}


void main()
{
char str1[MAX],str2[MAX];
printf("str1 Input:");
gets(str1);
printf("str2 Input:");
gets(str2);
lenstr(str1,str2);
cmpstr(str1,str2);
}


全部回答
  • 1楼网友:零点过十分
  • 2021-04-15 07:39

#include <stdio.h>

int lenstr(char *str) { int len; if(!str) { printf("string is NULL!\n"); return -1; }

for(len=0;*(str++) != '\0';len++) ; return len; }

char *catstr(char *des, char *src) { int len; char *result,*p; if (!des||!src) { printf("string is NULL!\n"); return NULL; } len=lenstr(des)+lenstr(src); result=(char *)malloc(len+1); p=result; for(;*des!='\0';) *(p++)=*(des++); for(;*src!='\0';) *(p++)=*(src++); *p=0; return result; }

int cmpstr(char *str1, char *str2) { int result; if (!str1||!str2) { printf("string is NULL!\n"); result= -2; goto end; } while (*str1!=0&&*str2!=0) { if(*str1>*str2) { result= 1; goto end; } else if (*str1<*str2) { result= -1; goto end; } str1++; str2++; } if (!(*str2)&&!(*str1)) result= 0; else if(!(*str1)) result= -1; else result= 1; end: return result; } int main() { char *str1="hello world!"; char *str2="hello!"; char *tmp; printf("%s length is %d\n%s length is %d\n", str1,lenstr(str1),str2,lenstr(str2)); if(cmpstr(str1,str2)>=0) tmp=catstr(str2,str1); else tmp=catstr(str1,str2); printf("%s length is %d\n",tmp,lenstr(tmp)); free(tmp); getch(); return 0; }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯