程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 字符串去特定字符-2009年哈爾濱工業大學計算機研究生機試真題,2009廣東行測真題

字符串去特定字符-2009年哈爾濱工業大學計算機研究生機試真題,2009廣東行測真題

編輯:關於C語言

字符串去特定字符-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;
}

運行結果:

 

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved