c语言程序设计第一章3
时间:2014-04-29 15:50:20
收藏:0
阅读:506
字符数组是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 }
运行结果:
评论(0)