标签:
题目描述:
输入字符串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年哈尔滨工业大学计算机研究生机试真题
标签:
原文地址:http://www.cnblogs.com/hlwyfeng/p/4495794.html