您的位置:首页 > 其它

删除每个输入行末尾的空格,制表符,并删除全空格行

2011-04-21 04:35 906 查看
源自《The C Programming Language》P22 pr1-18:

编写一个程序,删除每个输入行末尾的空格,制表符,并删除完全是空格的行

代码:

 

main.c

#include <stdio.h>

#define        MAXLINE        1000

int getLine(char line[], int maxline);
int remove(char s[]);

int main()
{

char line[MAXLINE];

while(getLine(line, MAXLINE) > 0)
if(remove(line) > 0)
printf("%s", line);

return 0;
}

int remove(char s[])    //删除字符串s末尾的空格和制表符并返回它的新长度
{
int i;

i = 0;
while(s[i] != '\n')        //查找'\n'在s数组中对应的下标
++i;
--i;
while(i >= 0 && (s[i] == '' || s[i] == '\t'))    //从字符串末尾起向前查找字符值不是' '和'\t'的字符
//所对应的下标
--i;
if(i >= 0)
{
++i;
s[i] = '\n';
++i;
s[i] = '\0';
}

return i;
}


分析:

1, 对比于自己实现的代码,发现这段代码简洁多了,思路也很清晰和易懂。

2, 有点缺憾之处:(a),每次输入一行字符,处理结果会紧接着下一行输出,不太容易观看,

而上面那段代码就不存在这个问题。

(b),参考代码没有考虑一行字符串没有'/n'的情况,这和它将MAXLINE设成1000有关,

极端的情况是一个字符串就是1000个字符,并且倒数第二字符不是'/n',如果MAXLINE

的值比较小的话,这个问题就凸现出来了,相比于此,上段代码考虑了这种情况。

修改remove函数:

while(s[i] != '/n' && i < MAXLINE - 2)

++i;

if(i != MAXLINE - 2)

--i;

while(i >= 0 && (s[i] == ' ' || s[i] == '/t'))

--i;

if( i >= 0 && i < MAXLINE - 2)

{

++i;

s[i] = '/n';

++i;

s[i] = '/0';

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐