码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-11 23:47:49      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:


题目描述:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!