计算机二级-C语言-程序设计题-190118记录-通过数组和指针两种方式对字符串进行处理。
//编写一个函数fun,比较两个字符串的长度,(不使用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符长度相同,则返回第一个字符串。
//重难点:通过数组处理和通过指针进行处理的不同。记住对指针进行处理以后,指针的位置已经发生变化,所以要进行指针的备份。注意返回值类型是否匹配,这里函数为指针函数所以返回的时候只返回指针名即可。数组备份的时候必须在初始化的时候进行复制。尽量使用数组。尽可能的简化代码。对文件的输入输出的不同。
1 #include <stdio.h> 2 char *fun ( char *s, char *t) 3 { 4 /* int i; 5 char *q = s, *w = t;//定义指针备份的时候,要在初始化的时候进行赋值。 6 for (i = 0; *q&&*w; i++)//这两个字符有一个到结尾,循环就结束。 7 { 8 q++; 9 w++; 10 } 11 if (*q == 0 && *w == 0) 12 return s; 13 if (*q)//这种情况,*q还没有结束,而*w等于0,已经结束了。说明q要长一点。 14 return s; 15 else 16 return t;*/ 17 /* int i, j;//可以不需要从新申明计数器,使用循环的i和j就可以。 18 for (i = 0; s[i] != '\0'; i++);//这里空语句分号不能省略,代表循环什么都不做。 19 for (j = 0; t[j] != '\0'; j++); 20 if (i < j)//可以的话,可以省略大括号。 21 return t; 22 else 23 return s;*/ 24 int i=0, j=0; 25 char *q=s, *w=t;//通过指针对数组做处理的时候,注意,对数组操作之后,指针的位置已经不是第一个字符了,所以必须进行备份,然后对新复制的指针,进行操作。 26 //q = s;//这样不可以。 27 //w = t; 28 while(*q!='\0') 29 { 30 i = i + 1; 31 q = q + 1; 32 } 33 //printf("%d",i); 34 while(*w!='\0') 35 { 36 j = j + 1; 37 w = w + 1; 38 } 39 //printf("%d",j); 40 if (i < j) 41 { 42 return t;//这里返回指针名,不加*号,因为函数为指针函数。 43 } 44 else 45 { 46 return s; 47 } 48 49 } 50 main( ) 51 { char a[20],b[20]; 52 void NONO ( ); 53 printf("Input 1th string:") ; 54 gets( a); 55 printf("Input 2th string:") ; 56 gets( b); 57 printf("%s\n",fun (a, b )); 58 NONO (); 59 } 60 void NONO ( ) 61 {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ 62 FILE *fp, *wf ; 63 int i ; 64 char a[20], b[20] ; 65 fp = fopen("in.dat","r") ; 66 wf = fopen("out.dat","w") ; 67 for(i = 0 ; i < 10 ; i++) { 68 fscanf(fp, "%s %s", a, b) ; 69 fprintf(wf, "%s\n", fun(a, b)) ; 70 } 71 fclose(fp) ; 72 fclose(wf) ; 73 }