源自《the c programming language》p22 pr1-18:
編寫乙個程式,刪除每個輸入行末尾的空格,製表符,並刪除完全是空格的行
**:main.c
1分析:1, 針對輸入的字串(line)的倒數第二個字元是否為'/n',分情況進行消除字串末尾的空格及製表符處理。#include
<
stdio.h
>23
#define
maxline 1045
intgetline(
char
s, int
lim);
6void
copy(
char
to,
char
from);
7int
calclen(
char
s);8
9int
main()
1029
if(index
>-1
)30copy(post_line[row
++], line);
//如果line是全空格字串,對其進行消除字串結尾處
31//
操作使得line成為乙個空字串,故不將其(空字串)
32//
拷貝到post_line中。33}
3435
for(index =0
; index
<
row;
++index)
//post_line針對其中每個字串的倒數第二個字元是否為'\n'
36//
在列印的時候做不同處理。
37if
(post_line[index][calclen(post_line[index])-1
] !='\n
')
38printf(
"%s\n
", post_line[index]);
39else
40printf("%s
",post_line[index]);
4142
return0;
43}4445
intgetline(
char
s, int
lim)
4657
s[i] ='
\0';58
fflush(stdin);
5960
return
i;61}62
63void
copy(
char
to,
char
from)
6474
75int
calclen(
char
s)76
2, 針對處理後的字串(post_line[n])的倒數第二個字元是否為'/n',在列印的時候分情況進行處理。
3, getline函式:讀入一行字元後,將輸入緩衝區清空,這樣當超過字元陣列line的界限的字元會被清除掉,
如果不清空,則在下次呼叫getline函式時,上次超出的字元部分會被getchar函式直接
讀到這次的line字元陣列中,造成混亂。
main.c
1分析:1, 對比於自己實現的**,發現這段**簡潔多了,思路也很清晰和易懂。#include
<
stdio.h
>23
#define
maxline 100045
intgetline(
char
line,
intmaxline);
6int
remove(
char
s);7
8int
main()919
20int
remove(
char
s)
//刪除字串s末尾的空格和製表符並返回它的新長度
2138
39return
i;40
}
而上面那段**就不存在這個問題。
(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';
使用迴圈讀取輸入行,直到使用者輸入一行空
char s gets char st,int n 函式返回的是乙個指向char型別陣列開頭的指標。如果使用者輸入空行,陣列第乙個元素是 0 判定迴圈結束的條件就應該是 while s gets ch,size 0 char s gets char st,int n 讀取輸入行,最多不能超過n 1個...
C 去除輸入行中空白的方法
刪除每個輸入行末尾的空格及製表符,並刪除完全是空格的行 include 每一行存放不超過1000個字元,最多輸入不超過1000行 define max 1000 int getline char line,int limit www.cppcns.com main i printf the new ...
刪除單鏈表的給定節點(非末尾)
此刪除法,只給了需要刪除的那個節點!請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。示例 1 輸入 head 4,5,1,9 node 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 ...