C primer plus 第六版 第十一章 第十題 程式設計練習答案
阿新 • • 發佈:2018-12-28
Github地址:φ(>ω<*)這裡這裡。
/*
本次任務為編寫一個函式接受一個字串作為引數,並刪除字串中的空格。
在一個程式中測試該海曙,使用迴圈讀入輸入行,知道使用者輸入一行空行。
該程式應該應用該函式讀取每個輸入的字串,並顯示處理後的結果。
*/
#include<stdio.h> #define o 100 void del(char * s1); int main(void) { int i = 0; char name[o] = {}; while(true) { printf("Please input(Empty line to quit): \n"); fgets(name, o, stdin); if(name[0] == '\n') { break; } // 處理 fgets()的換行符。 i = 0; while(name[i] != '\n') { i++; } if(name[i] == '\n') { name[i] = '\0'; } del(name); } printf("Bye~\n"); getchar(); return 0; } void del(char * s1) { // 思路:這個刪除操作啊。。。我打算用迴圈,遍歷name陣列的值,然後用另外一個數組儲存字串。 // 把純字元文字儲存完畢再遍歷一遍拷貝進去。 // 所以這個指向開頭的指標很重要。。。。 int i = 0; char name2[o] = {}; char * star; star = s1; // 這是第一步,把純文字儲存進一個數組。 while(*s1 != '\0') { // 這個拷貝就是把沒有空格字元的純字元文字拷貝到一個新的陣列。 if(*s1 == ' ') { s1++; continue; } name2[i] = *s1; s1++; i++; } name2[i] = '\0'; // 別忘了末尾的空字元哦。。 // 這是第二步,重新給name陣列賦值。 i = 0; s1 = star; while(name2[i] != '\0') { *s1 = name2[i]; printf("\nHow about this s1 : %c. and i %d..\n", *s1, i); s1++; i++; } *(s1) = '\0'; /* 這樣重寫就相當於把純文字文件覆蓋原陣列了,然後再新增一個\0。 這樣就是兩個字串,一個是純文字文件+\0;另外一個是原陣列剩下的字元加+\0。 這麼說應該懂我的思路了吧。。雖然上面有寫。 */ printf("\nThis is the result:\n"); while(*star != '\0') { printf("%c", *star); star++; } putchar('\n'); return; }