9、筛选满足长度条件的输入内容进行输出
1 #include <stdio.h> 2 3 #define maxlength 1000 //设定一个数组的最大长度值 4 #define max_length 3 //设定一个需要筛选的长度值,输入长度大于等于3的内容将被筛选出来 5 6 int getline(char line[], int length); //定义一个数组获取函数 7 void copyline(char from[], char to[]); //定义一个数组拷贝函数 8 int m = 0; //定义一个全局变量m,初始值设为0 9 10 int main() 11 { 12 int length; //当前输入字符串长度 13 char line[maxlength]; //存放当前输入字符串的数组,长度为设定的最大长度 14 char max_line[maxlength]; //存放满足输入长度要求的数组 15 16 while((length=getline(line, maxlength)) > 0) //循环条件:输入长度>0 17 { //循环内容:如果输入的长度大于要求的长度 18 if ((length-1) >= max_length) //则将输入的内容拷贝到存放的数组中区 19 copyline(line, max_line); //比较的时候-1是因为在计算长度的时候把'\n' 20 } //也计入在内了,这里需要去掉后再比较 21 if (m > 0) 22 printf("输入长度大于%d的有:\n%s", max_length, max_line); 23 else 24 printf("没有满足条件的输入内容!"); 25 return 0; 26 } 27 28 int getline(char line[], int length) //输入字符传获取和存储函数 29 { 30 int i; 31 int c; 32 33 for(i=0; (c=getchar())!=EOF && c!='\n'; ++i) 34 line[i] = c; 35 if (c == '\n') 36 { 37 line[i] = c; 38 ++i; 39 } 40 41 return i; //返回本次输入的字符串长度值,包含换行符 42 } 43 44 void copyline(char from[], char to[]) //数组拷贝函数 45 { 46 int i; //这里使用了另外一个全局变量m的原因是: 47 //每次在将原数组拷贝到指定数组的时候,从原数组内取值 48 for (i=0; from[i]!='\n'; ++i) //肯定每次都是从0开始的,但是在存放到指定数组内的时候 49 { //是连续进行存放的,并不是每次都从这个数组的第一个开始, 50 to[m] = from[i]; //这就需要一个变量来能够记录指定的这个数组已经存放到 51 ++m; //哪个位置了,在下次进入拷贝函数的时候可以接着上次存储 52 } //的最后位置继续向后进行存放 53 to[m] = from[i]; 54 ++m; 55 }
如果有一个满足条件的输入行,那么就要保存下来,如果有两个,那就要保存两个。
也就是说,需要保存的行时动态变化的,但是以现在掌握的内容,还暂时不知道怎么动态的控制使用多少个数组,那怎么实现这个功能呢?
最后意识到就是使用换行符!
之前已经做过输入字符串的获取和存储,以及字符串最长内容的筛选拷贝,原来是发现一个更长的字符串,那么就用这个更长的把之前存放的字符串覆盖掉,
现在是把这个过程换一下,不进行覆盖,而是追加,在两段字符串之间加入换行符,这样在最终输出的时候就可以实现把满足条件的字符串逐一筛选输出