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