请编写函数fun,其功能:编写函数fun(char *s0,char *s1,char *s2,char *s3),要求实现——将s0所指字符串分解成3个字符串,分别存入s1、s2、s3所指内存中。分解的方法是,s1、s2、s3从s0中依次按顺序每隔3个字

admin2022-10-25  39

问题 请编写函数fun,其功能:编写函数fun(char *s0,char *s1,char *s2,char *s3),要求实现——将s0所指字符串分解成3个字符串,分别存入s1、s2、s3所指内存中。分解的方法是,s1、s2、s3从s0中依次按顺序每隔3个字符取1个。
     例如:s0为”abcdefghij”时,分解完成后,s1、s2、s3分别为”adgj””beh””cfi”。
     注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
     #include<stdio.h>
     #include<string.h>
     void fun(char *s0,char *s1,char *s2,char *s3)
     {

     }
     void main()
   {
     void NONO();
     char s0[100],s1[40],s2140],s3[40];
     printf(”请输入一行字符串\n”);
     gets(s0);
     fun(s0,s1,s2,s3);
     puts(s1);
     puts(s2);
     puts(s3);
     NONO();
   }
   void NONO()
   {
     FILE *fp=fopen(”out.dat”,”w”);
     char s0[10][100]={”1234567890qazwsx”,”abcdefghij”,”0987654321plmokn”,”fsdjfsdlrj564342dsf”,”gfdklgjdsfl4754398”,”zxcvbnmasdfg”,”asdfghjkl123”,”qwertyuiop456”,”qweasdzxc789”,”poiuytrewqwsxqaz”};
     char s1[40],s2[40],s3[40];
     int i;
     for(i=0;i<10;i++)
     {
       fun(s0,s1,s2,s3);
       fprintf(fp,”s1=%s,s2=%s,s3=%s\n”,s1,s2,s3);
     }
     fclose(fp);
   }

选项

答案 { char *p1=s0,*p2=s0+1,*p3:s0+2; int len=strlen(s0),i=0,j=0,k=0; while(p1<s0+len||p2<s0+len||p3<s0+len) { if(p1<s0+len) { s1[i++]=*p1; p1=p1+3; } if(p2<s0+len) { s2[j++]=*p2; p2=p2+3; } if(p3<s0+len) { s3[k++]=*p3; p3=p3+3; } } s1[i]=’\0’; s2[j]=’\0’; s3[k]=’\0’;

解析 分别定义字符指针p1,p2,p3,p1指向字符串s0的第1个字符,p2指向字符串曲的第2个字符,p3指向字符串s0的第3个字符。在while循环内,循环条件为指针p1,p2,p3指向字符串末尾,循环结束。循环内分别将指针p1,p2,p3指向的字符存放到对应的数组中,再将指针移动3个位置。最后将数组s1,s2,s3的最后一个字符赋值字符串结束标志。
转载请注明原文地址:https://kaotiyun.com/show/vRkp777K
0

最新回复(0)