描述

将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。

数据范围:字符串长度满足 1n100 

输入描述:

输入一个字符串

输出描述:

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

示例1

输入:
Jkdi234klowe90a3
输出:
Jkdi*234*klowe*90*a*3*

解法一代码部分:
#include <stdio.h>
#include <string.h>
//以下是Senky的代码:
//算法写在前面:
//pre_isnum是当前一个元素n[i]的前一个元素是不是数字的判断标记
//①前一个不是数字,当前n[i]是数字,那就要输出‘*’再输出n[i]
//②前一个是数字,当前n[i]不是数字,那也要输出‘*’再输出n[i]
//③前一个是数字,当前n[i]是数字,输出n[i]
//④前一个不是数字,当前n[i]不是数字,输出n[i]
//此算法可以处理前len-1个字符的关系,如果最后一个字符是数字就补一个‘*’
void start() {
    char n[100];
    scanf("%[^\n]", n);
    int len = strlen(n); //字符串长度
    int i = 0;//下标从0开始
    int pre_isnum = 0;//第一个元素前面默认不是数字,初始化为0
    for (i = 0; i < len; i++) {//循环遍历字符串
        if (n[i] >= '0' && n[i] <= '9') {//n[i]是数字
            if (pre_isnum == 0) printf("*"); //①输出*号
            printf("%c", n[i]);//输出n[i]
            pre_isnum = 1;//进入下一轮循环时标记置为1
        } else {//进入else说明n[i]不是数字
            if (pre_isnum == 1) printf("*"); //②输出*号
            printf("%c", n[i]);//输出n[i]
            pre_isnum = 0;//进入下一轮循环时标记置为0
        }
        if (i == len - 1 && n[i] >= '0' &&
                n[i] <= '9') printf("*"); //处理最后一个字符
    }
}

int main() {
    start();
    return 0;//编辑于2022/10/11
}
解法二代码部分:
#include <stdio.h>
#include <string.h>
//以下是Senky的代码:
//算法写在前面:
//把字母和数字看做两种类型,那么两种类型交接处必定会有'*'
//设计一个函数判断交接处
//①数字 字母: 则输出 n[i-1] * n[i]
//②字母 数字: 则输出 n[i-1] * n[i]
//③数字 数字 || 字母 字母:则先输出n[i-1] n[i]
//依次输出字符,遇到交接面就输出'*'
int is_number(char now) {
    int ret = 0; //默认不是数字
    if (now >= '0' && now <= '9') ret = 1; //是数字则返回1不是就返回0
    return ret;
}

void start() {
    char n[100];
    scanf("%[^\n]", n);
    int len = strlen(n); //字符串长度
    int i = 0;//下标从0开始
    if (is_number(n[i])) printf("*");//处理第一个字符
    for (i = 1; i < len + 1; i++) { //循环遍历字符串
        printf("%c", n[i - 1]);//依次输出字符
        //异或运算,同0异1,为1是交接面
        if (is_number(n[i])^is_number(n[i - 1])) {
            printf("*");//输出‘*’
        }
    }
}

int main() {
    start();
    return 0;//编辑于2022/10/11
}
总结
①解法一很妙,有点操作系统信号量机制的味道 
②解法二的数组越界的时候判断is_number(n[len])结果为0,即可以认为越界元素不是数字;
当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;