对字符串处理的思想

题目:

将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变

示例1

输入

Jkdi234klowe90a3

输出

Jkdi*234*klowe*90*a*3*

代码:

#include <cstdio>
#include <cstring>
/*
主要是对特殊情况的处理,比如:
1.第一个或最后一个为数字的情况
2.只有一个数字,周边都是字母的情况
而采用标记的方式,则很好的之后了数字的位置,以及数字周边的情况
*/
int main(){
    int i, cnt[107];
    char s[105];
    while(scanf("%s", s) != EOF){
        memset(cnt, 0, sizeof(cnt));
        for(i=0; i<strlen(s); i++){
            if(s[i]>='0' && s[i]<='9') cnt[i]=1;
        }
        if(s[0]>='0' && s[0]<='9') printf("*");
        for(i=0; i<strlen(s); i++){
            if(i>0 && cnt[i]-cnt[i-1]==1){
                printf("*%c", s[i]);
                if(i+1<strlen(s) && cnt[i]-cnt[i+1]==1) printf("*");
            }else if(i+1<strlen(s) && cnt[i]-cnt[i+1]==1) printf("%c*", s[i]);
            else printf("%c", s[i]);
        }
        if(s[strlen(s)-1]>='0' && s[strlen(s)-1]<='9') printf("*");
        printf("
");
    }
    return 0;
}



原文地址:https://www.cnblogs.com/heyour/p/12458489.html