北航研究生複試2011上機第三題:顯示省略

題目大意:給定一個字符串 其中包含‘-’,如dsafas-zdfaf10,將s-z中省略的字符全部顯示出來:dsafastuvwxyzdfaf10,程序只考慮a-z, A-Z, 0-9。且a-S, 0-r之類的不進行擴展。原樣輸出。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 1000

void GetNewStr(char* str, int len);         //輸出新的字符串
bool Judge(char a, char b);                 //判斷'-' 前後是否一致 如a-b 0-8 G-M返回true
void strcpy_part(char* newstr, int &k1, char* str, int k2,  int n); //從str[k2]開始將n個字符複製到newstr[k1]起始處
void addNewPart(char* str, int &k, char begin, char end);           //在str[k]開始將begin---end閉區間的字符添加到str中

int main(){

    char str[MAXSIZE];
    while(scanf("%s", str) != EOF){
        int len = strlen(str);
        GetNewStr(str,len);
    }

    return 0;
}

void GetNewStr(char* str, int len){
    char begin,end;
    char newstr[MAXSIZE] = {'0'};
    strcpy(newstr,str);
    int i,k,count;
    k = count = 0;      //k 記錄新字符串的賦值位置, count記錄舊字符串要複製的起始位置
    for(i = 0; i < len; i++){
        if(str[i] == '-'){
            begin = str[i - 1];     //記錄起始字符 '* - #'中的* 
            end = str[i + 1];       //記錄終止字符 '* - #'中的#
            if(Judge(begin,end)){
                strcpy_part(newstr, k, str, count, i - count - 1);  //複製'*-*'前面的字符到新串
                count = i + 1;
                addNewPart(newstr,k,begin,end);                     //在新串中添加'*-*'閉區間的字符
            }
        }
    }
    strcpy_part(newstr,k,str, count, len - count);                  //最後尾段的複製
    printf("%s\n", newstr);
}

bool Judge(char a, char b){
    if(a >= 'a' && a <= 'z'){
        if(b > a && b <= 'z')
            return true;
    }else if(a >= 'A' && a <= 'Z'){
        if(b > a && b <= 'Z')
            return true;
    }else if(a >= '0' && a <= '9'){
        if(b > a && b <= '9')
            return true;
    }
    return false;
}

void strcpy_part(char* newstr, int &k1, char* str, int k2, int n){
    for(int i = 0; i < n; i++)
        newstr[k1++] = str[k2++];
}

void addNewPart(char* str, int &k, char begin, char end){
    for(; begin <= end; begin++){
        str[k++] = begin;
    }
    --k;
}

樣例:
ADEa-g-m02
cdeT-bcd
ADEa-gjkalsdjgna-m023401-7
cdeT-bcda-g23401-7

結果:
這裏寫圖片描述

發佈了76 篇原創文章 · 獲贊 83 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章