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

用C语言实现将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变
新手遇到这样的题目,不用链表或C++,用语言怎么实现?想了好久,不知道怎么做?有大神贴上代码参考一下思路.
------解决思路----------------------
仅供参考!
#include<stdio.h>

void insertmark(char* source,char* result){
char* p = source, *q = result;
int num = 0;   //用来判断是否正在读取数字
while (*p != '\0'){
if (num==0&&*p <= '9'&&*p >= '0'){
*(q++) = '*';
num = 1;
}
else if (num == 1 && (*p > '9' 
------解决思路----------------------
 *p < '0')){
*(q++) = '*';
num = 0;
}
*(q++) = *(p++);
}
if (num == 1)
*(q++) = '*';
*q = '\0';
}

int main(){
char str[] = "12abcd321s2defg01fsd3";
char result[50];
insertmark(str, result);
puts(result);
}

------解决思路----------------------
仅供参考
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void insertMark(char *buffer,char *target)
{
char *p;
//1表示当前字符是数字,0则表示非数字
int state = 0;
int i;
p = target;
for(i = 0; *p != '\0'; ++p)
{
//如果是一串数字的开始,则在串前面加*
if(state == 0 && *p >= '0' && *p <= '9')
{
//状态转移
state = 1;
buffer[i++] = '*';
buffer[i++] = *p;
}
//如果是是一串数字结尾,则在结尾处加*,例如11211d,则12211*
else if(state == 1 && (*p < '0' 
------解决思路----------------------
 *p > '9'))
{
//状态转移
state = 0;
buffer[i++] = '*';
buffer[i++] = *p;
}
//如果是一串非数字,则直接写入buffer,例如12,则写入12
else if(state == 0 && (*p < '0' 
------解决思路----------------------
 *p > '9'))
{
buffer[i++] = *p;
}
//如果当前是一串数字,则写入buffer
else if(state == 1 && *p >= '0' && *p <= '9')
{
buffer[i++] = *p;
}
}
buffer[i] = '\0';
}

int main()
{
char str[30];
char buffer[100];
fgets(str,sizeof(str),stdin);
insertMark(buffer,str);
puts(buffer);

exit(0);
}