標籤:
題目描述:
輸入字串s和字元c,要求去掉s中所有的c字元,並輸出結果。
輸入:
測試資料有多組,每組輸入字串s和字元c。
輸出:
對於每組輸入,輸出去除c字元後的結果。
範例輸入:
heallo
a
範例輸出:
hello
解題代碼:
解法1:使用兩個數組, 第二個數組儲存去掉特定字元的字串
#include <stdio.h>int main(){ char arr[200]; char arrNew[200]; char focus; while (scanf("%s", arr) != EOF){ getchar(); scanf("%c",&focus); int j = 0; for (int i = 0; arr[i] != ‘\0‘; i++){ if (arr[i] != focus){ arrNew[j] = arr[i]; j++; } } arrNew[j] = ‘\0‘; printf("%s\n",arrNew); } return 0;}
運行結果:
解法2: 僅使用一個數組,發現一個特定字元就位移一次,覆蓋掉特定字元
#include <stdio.h>#include <string.h>int main(){ char arr[200]; char focus; while (scanf("%s", arr) != EOF){ int m = strlen(arr); getchar(); scanf("%c",&focus); for (int i = 0; i < m; i++){ if (arr[i] == focus){ for (int j = i + 1; j < m; j++){ arr[j - 1] = arr[j]; } i--; arr[m-1] = ‘\0‘; m--; } } printf("%s\n",arr); } return 0;}
運行結果:
OJ判斷情況:
解法1:
解法2:
演算法分析:(本題也是水題)
解法1:使用兩個數組,第二個數組儲存去掉特定字元的字串
特別注意以下:
while (scanf("%s", arr) != EOF){ getchar(); scanf("%c",&focus);
這裡的getchar(); 必須用,因為%c,會把斷行符號鍵作為一個字元,這樣下來就無法輸入特定字元了。
演算法複雜度:O(n^2)
解法2: 僅使用一個數組,發現一個特定字元就位移一次,覆蓋掉特定字元
注意以下:
i--; arr[m-1] = ‘\0‘; m--;
位移一次,總的字串就少了一個字元,這個時候就相當於 i 的位置+1,所以要減一, 把m-1變成‘\0‘, 解釋: 原來的字串最後一個字元是‘\0‘, 那麼減少了一個, 就把倒數第二個設定為‘\0‘.
字串去特定字元-2009年哈爾濱工業大學電腦研究生機試真題