題目描述:
輸入字符串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'.