字符串往特定字符-2009年哈尔滨工业大学计算机研究生机试真题

字符串去特定字符-2009年哈尔滨工业大学计算机研究生机试真题


题目描述:

    输入字符串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;
}

运行结果:

字符串往特定字符-2009年哈尔滨工业大学计算机研究生机试真题

 

解法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;
}

运行结果:

字符串往特定字符-2009年哈尔滨工业大学计算机研究生机试真题

 

OJ判断情况:

解法1:字符串往特定字符-2009年哈尔滨工业大学计算机研究生机试真题

解法2:字符串往特定字符-2009年哈尔滨工业大学计算机研究生机试真题

 

算法分析:(本题也是水题)

解法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'.