计算机二级-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 }

 

posted @ 2019-01-18 12:17  小大大小  阅读(255)  评论(0编辑  收藏  举报