面試100題系列之10刪除字串中多餘的空格
阿新 • • 發佈:2019-02-01
題目描述:(微軟的一道筆試題)
1、無連續相鄰的兩個空格
2、字串開頭和結尾無空格
3、新的一行開頭和結尾無空格
要得滿分,必須滿足一下兩個條件
A、不能增加新的記憶體空間
B、只能迴圈字串一次
C、不準用庫函式
參考程式碼:
#include<stdio.h> void main() { char str[10000]; int flag;//用來標記,空格標記為0,新行標記為1,其餘的標記為2 int i,j; while(gets(str) != NULL) { flag = 1; i = 0; j = 0; while(str[j] != '\0') { while(str[j] == ' ')//過濾掉了所有空格 { ++j; if(flag == 2) { flag = 0; } } if(str[j] == '\0') { break; } if(str[j] == '\n')//剩下的不是換行符就是其他的 { str[i++] = str[j++]; flag = 1; } else { if(flag == 0) { str[i++] = ' '; } str[i++] = str[j++]; flag = 2; } }//end while(str[j] != '\0') str[i] = '\0'; printf("%d\n",i); puts(str); }//end while input }
PS:一點小問題:
這裡用gets輸入是以換行符讀進來的,如果用檔案的方式,也只是一行一行的讀,所以怎麼將換行符輸入到字串中的問題還沒有得到解決,也希望有大牛路過,留言幫我解決一下。