#define INTEGER_TYPE 1
#define FLOAT_TYPE 2
#define IsNum(x) (x>='0' && x<='9')//注意当字符串中只有一个数字,而需要用两个字符替换时,你传入的参数应保证不会导致内存越界。例如,如果有字符串"s1",则你需用char str[4]来存储才行,也就是要足够大。
void CheckStr(char *pStr)
{
char *p = pStr, *p1;
int flag = 0;
int dlen; while(*p++)
{
dlen = 0;
if(IsNum(*p))
{
flag = INTEGER_TYPE;
p1 = p;
dlen++;
do
{
p++;
if(IsNum(*p))
dlen++;
else if(*p == '.')
{
if(flag == FLOAT_TYPE)
break;
else if(IsNum(*(p+1)))
{
flag = FLOAT_TYPE;
dlen++;
}
else
break;
}
else
break;
}while(*p);
if(dlen<2)
{
strcpy(p+1, p);
p = p+1;
*p1++ = '%';
*p1++ = 'd';
}
else
{
*p1++ = '%';
if(flag == INTEGER_TYPE)
*p1++ = 'd';
else   /*FLOAT_TYPE*/
*p1++ = 'f';
strcpy(p1, p);
p = p1;
}
}
}
} void main(void)
{
char str[] = "dfsd12fds12...34fdsf";
CheckStr(str);
printf("%s", str);