字符数组是C语言中最常用的数组类型。下面我们通过编写一个程序,来说明字符数组以
反操作字符数组的函数的用法。该程序读入一组文本行,并把最长的文水行打印出来。该算
法的基本框架非常简单:
while
(还有未处理的行)
i f (该行比已处理的最长行还要长)
保存该行
保存该行的长度
打印最长的行
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define MAXLENGTH 100//文本的最大长度
4 int getline(char line[],int limit);
5 void copyline(char to[],char from[]);
6 int main()
7 {
8 int length;//当前行的长度
9 int maxlength=0;//最大行的长度
10 char line[MAXLENGTH];//保存当前行的字符串
11 char longest[MAXLENGTH];//保存最大行的字符串
12 while((length=getline(line,MAXLENGTH))>0)
13 {
14 if(length>maxlength)
15 {
16 maxlength=length;
17 copyline(longest,line);
18 }
19 }
20 if(maxlength>0)
21 {
22 printf("%s",longest);
23 }
24 return 0;
25 }
26 /*getline函数:将输入的字符保存到line数组中,并返回数组长度*/
27 int getline(char line[],int limit)
28 {
29 int c;
30 int i;
31 for(i=0;i<(limit-1)&&(c=getchar())!=EOF&&c!=‘\n‘;i++)
32 {
33 line[i]=c;
34 }
35 if(c==‘\n‘)
36 {
37 line[i]=c;
38 ++i;
39 }
40 line[i]=‘\0‘;
41 return i;
42 }
43 /*copyline函数:经最长字符串保存到to数组中*/
44 void copyline(char to[],char from[])
45 {
46 int i=0;
47 while((to[i]=from[i])!=‘\0‘)
48 ++i;
49 }
运行结果:
练习1.16修改打印最长文本行的程序的主程序m a i n,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define MAXLENGTH 15//文本的最大长度
4 int getline(char line[],int limit);
5 void copyline(char to[],char from[]);
6 int main()
7 {
8 int length;//当前行的长度
9 int maxlength=0;//最大行的长度
10 char line[MAXLENGTH];//保存当前行的字符串
11 char longest[MAXLENGTH];//保存最大行的字符串
12 printf("The maxlength of string is 15.\n");
13 while((length=getline(line,MAXLENGTH))>0)
14 {
15 printf("%2d:%s",length,line);
16 if(length>maxlength)
17 {
18 maxlength=length;
19 copyline(longest,line);
20 }
21 }
22 if(maxlength>0)
23 {
24 printf("%s",longest);
25 }
26 return 0;
27 }
28 /*getline函数:将输入的字符保存到line数组中,并返回数组长度*/
29 int getline(char line[],int limit)
30 {
31 int c;
32 int i;//记录输入的字符串长度
33 int j=0;//记录实际可以保存的字符串长度
34 for(i=0;(c=getchar())!=EOF&&c!=‘\n‘;i++)
35 {
36 if(i<(limit-2))
37 {
38 line[j]=c;
39 j++;
40 }
41 }
42 if(c==‘\n‘)
43 {
44 line[j]=c;
45 ++j;
46 ++i;
47 }
48 line[j]=‘\0‘;
49 return i;
50 }
51 /*copyline函数:经最长字符串保存到to数组中*/
52 void copyline(char to[],char from[])
53 {
54 int i=0;
55 while((to[i]=from[i])!=‘\0‘)
56 ++i;
57 }
运行结果:
练习1.18编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行
1 /*******删除每个输入行末尾的空格及制表符,并删除完全是空格的行****************/
2 #include <stdio.h>
3 #include <stdlib.h>
4 #define MAXLENGTH 100
5 int getline(char s[],int limit);
6 int mydelete(char s[]);
7 int main()
8 {
9 int len;
10 char s[MAXLENGTH];
11 while((len=getline(s,MAXLENGTH))>0)
12 {
13 printf("未删除之前字符数(包含空格):");
14 printf("%d\n",len);
15 if(mydelete(s)>0)
16 {
17 printf("删除之后字符数:");
18 printf("%d",mydelete(s));
19 }
20 }
21 return 0;
22 }
23 int getline(char s[],int limit)
24 {
25 int c;
26 int i;
27 for(i=0;i<(limit-1)&&((c=getchar())!=EOF)&&c!=‘\n‘;i++)
28 {
29 s[i]=c;
30 }
31 if(c==‘\n‘)
32 {
33 s[i]=c;
34 ++i;
35 }
36 s[i]=‘\0‘;
37 return i;
38 }
39 int mydelete(char s[])
40 {
41 int i=0;
42 while(s[i]!=‘\n‘)
43 ++i;
44 --i;
45 while(i>=0&&(s[i]==‘ ‘||s[i]==‘\t‘))
46 --i;
47 if(i>=0)
48 {
49 ++i;
50 s[i]=‘\n‘;
51 ++i;
52 s[i]=‘\0‘;
53 }
54 return i;
55 }
运行结果:
c语言程序设计第一章3,码迷,mamicode.com
时间: 2024-10-23 04:08:44