C圣经---删除输入行末尾的空格以及制表符,并删除完全是空格的行
2015-02-11 11:56
393 查看
源自<The C language programming>
编写一个程序,删除每个输入行末尾的空格以及制表符,并删除完全是空格的行
getline函数,能够在读入文本行时返回该行的长度,而在遇到文件结束符时返回0
由于0不是有效的行长度,因此可以作为标志文件结束的标志.
每一行,至少包括一个字符,只包含换行符的行,其长度为1
1.下面的代码只是并未真正删除空格以及制表符,只是让其不再显示
2.书上的答案
remove函数负责删除掉字符line末尾的空格和制表符并返回他的新长度
如果这个长度 > 0 ,则说明line中有不是空格和制表符的其他字符,程序就会把这以后打印出来
,否则就说明这一行完全是由空格和制表符构成的,程序就将忽略掉这一行
remove函数首先找到'\n'
然后倒退一个位置,随后这个函数从后向前检查空格或制表符,直到他找到一个不是空格或者制表符的字符,或者没有字符可让它继续倒退(i < 0)
如果i >= 0,则表明至少有一个字符,此后,函数remove将换行符和字符串结束符写回输入行,再返回变量i
编写一个程序,删除每个输入行末尾的空格以及制表符,并删除完全是空格的行
getline函数,能够在读入文本行时返回该行的长度,而在遇到文件结束符时返回0
由于0不是有效的行长度,因此可以作为标志文件结束的标志.
每一行,至少包括一个字符,只包含换行符的行,其长度为1
1.下面的代码只是并未真正删除空格以及制表符,只是让其不再显示
#include<stdio.h> //#include<stdlib.h> #define MAXLINE 1000 int getline(char s[], int lim); int main(){ int len,i; char line[MAXLINE]; while( (len = getline(line,MAXLINE))> 0){ //如果还有未处理的输入行 ,len为输入行的长度 //printf("%s",line); for(i = 0; i < len; i++) //打印输入行 printf("%c",line[i]); //printf("\n"); } //system("pause"); return 0; } int getline(char s[], int lim){ int i,j,len; char c; for(i = 0; i < lim - 1 && (c = getchar())!= EOF && c != '\n'; i++) s[i] = c; if(c == '\n'){ s[i] = c; i++; } s[i] = '\0'; len = i;//len表示字符串的长度 //从字符串的末尾开始处理,输入行末尾是空格及制表符,并且输入行完全是空格的情况 for(j = i - 1; j >= 0;j--){ if(s[j] != ' ' && s[j] != '\t') //如果从字符串末尾开始,遇到不是' '且不是'\t' break; //则跳出循环,处理结束 if(s[j] == ' ' || s[j] == '\t') //如果遇到' '或者'\t',则将字符串的长度-- len--; } return len; }
2.书上的答案
#include<stdio.h> #include<stdlib.h> #define MAXLINE 1000 /*编写一个程序,删除每个输入行末尾的空格及制表符, 并删除完全是空格的行 */ int getline(char s[],int lim); int remove(char s[]); int main(){ char line[MAXLINE]; while( getline(line,MAXLINE) > 0){ //如果存在未处理的输入行 if(remove(line) > 0) printf("%s",line); } system("pause"); return 0; } int getline(char s[], int lim){ int i; char c; for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++) s[i] = c; if(c == '\n'){ s[i] = c; i++; } s[i] = '\0'; return i; } int remove(char s[]){ int i = 0; while(s[i] != '\n') //每个输入行末两位是'\n','\0' i++; i--; //back off from '\n' //如果当前的字符为' ' 或者为'\t',则i继续向前进行判断 while( i >=0 && (s[i] == ' ' || s[i] == '\t' )){ i--; } //is it a noblank line? if(i >= 0){ //如果i>=0,则表明输入行不是空行,至少有一个字符 i++; s[i] = '\n'; //put newline character back i++; s[i] = '\0'; //terminate the string } return i;//返回newline的长度 }
remove函数负责删除掉字符line末尾的空格和制表符并返回他的新长度
如果这个长度 > 0 ,则说明line中有不是空格和制表符的其他字符,程序就会把这以后打印出来
,否则就说明这一行完全是由空格和制表符构成的,程序就将忽略掉这一行
remove函数首先找到'\n'
然后倒退一个位置,随后这个函数从后向前检查空格或制表符,直到他找到一个不是空格或者制表符的字符,或者没有字符可让它继续倒退(i < 0)
如果i >= 0,则表明至少有一个字符,此后,函数remove将换行符和字符串结束符写回输入行,再返回变量i
相关文章推荐
- 练习1-18 编写一个程序,删除每个输入行末尾的空格以及制表符,并删除完全是空格的行
- 编写一个程序,删除每个输入行末尾的换行符和制表符,并删除完全是空格或制表符的行<The C Programming Language>课后习题
- C语言程序设计习题1-18 删除每个输入行末尾的空格或制表符,并删除完全是空格的行
- 练习 1- 18 删除每个输入行末尾的空格及制表符,并删除完全是空格的行
- 输入文本框中输入手机号自动添加空格以及在手机号中间的空格处删除时自动删除末尾号码其他位置则删除直接删除实现
- 删除每个输入行末尾的空格,制表符,并删除全空格行
- 删除每个输入行末尾的空格,制表符,并删除全空格行
- c程序设计语言_习题1-18_删除输入流中每一行末尾的空格和制表符,并删除完全是空格的行
- 练习1-22 编写一个程序,把较长的输入行折成短一些的两行或者多行,折行的位置在输入行的第N列之前的最后一个非空格之后。要保持程序能够智能地处理输入行很长以及在制定的列前没有空格或者制表符时的情况。
- 面试题 删除字符串开始以及末尾的若干空格,并且把中间多个空格转化为一个
- 字符串 删除字符串开始以及末尾的空白符,并把数组中间的多个空格(如果有)符转换为1个
- 删除字符串头部和末尾的空格
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 将输入的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个
- C语言复习之统计输入中的空格、制表符和换行符的个数
- Oracle11完全卸载方法 deinstall.bat如何用以及如何删除oracle注册表
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 文件夹末尾有空格、无法正常删除的空文件夹(无法读源文件或磁盘)的解决办法