zoukankan      html  css  js  c++  java
  • 【C语言】练习3-3

    •  题目来源:《The C programming language》中的习题P49
    •  练习2-9: 编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字幕和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。作为前道和尾随的-字符原样打印。
    • 代码实现:
    #include<stdio.h>
    #include<string.h>
    #define MAX 1000
    
    //判断是否为字母或者数字
    int chargeCon(char c1){
        if((c1 >= '0' && c1 < '9') || (c1 >= 'a' && c1 <= 'z') || (c1 >= 'A') && c1 <= 'Z'){
            return 1;
        }else{
            return 0;
        }
    }
    
    // 字符扩展
    int expandToFull(char c1, char c2, char* s,int pos){
        int i;
        if(c1 < c2){
            i = c1 + 1;
            for(; i< c2 + 0; i++){
                s[pos++] = i;
            }
        }else{
            i = c1 - 1;
            for(; i > c2 + 0; i--){
                s[pos++] = i;
            }
        }
        
        return pos;
    }
    
    // 扩展,即将a-z扩展为abcd..xyz
    void expand(char* s1, char* s2){
        int i, j, flag1, flag2;
        s2[0] = s1[0];
        j = 1;
        for(i = 1; i < strlen(s1); i++){
            flag1 = chargeCon(s1[i-1]);
            flag2 = chargeCon(s1[i+1]);
            // 如果是速记符号
            if( flag1 == 1 && flag2 == 1 && s1[i]=='-'){
                j = expandToFull(s1[i-1], s1[i+1], s2, j);
            }else{
                s2[j++] = s1[i];
            }
        }
        s2[j]='';
    }
    
    //主函数
    void main(){
        char charArr1[] = "-a-c-e-addd 1-3-1";
        char charArr2[MAX];
        expand(charArr1,charArr2);
        printf("%s
    ",charArr2);
    }
  • 相关阅读:
    【NOIP模拟赛】正方形大阵
    【优化王牌】二分查找
    【Ah20160703】咏叹 By C_SUNSHINE
    【NOIP模拟赛】lover——心上人
    【小奇模拟赛】小奇挖矿2
    【NOIP模拟赛】工资
    关于博客装修的说明
    【快速处理】分块算法
    【集训】 考试笔记
    【HDNOIP】HD201404最短路径
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3802686.html
Copyright © 2011-2022 走看看