今天看到一道华为的题,描述如下
以下是c代码,在vs2003上调试成功,参考了网上大神的例子,没有用链表没有用c++,这道题本来是要求使用c++完成的,我一做嵌入式的码农,对C语言情有独钟,因此在这里使用c语言。
注:所有的变量最好是在函数前面进行定义,否则会出现C2143的错误, error C2143: 语法错误 : 缺少“;”(在“类型”的前面),这个我在另一篇博客也有说过。
</pre><pre name="code" class="html">#include <stdio.h>
#include <stdlib.h>
int IsDigital(char c)
{
if ( c >= '0' && c <= '9')
{
return 1;
}
return 0;
}
void InsertAsterisk(const char * str ,char *pNew )
{
const char *pStr = str;
char *pNewTmp = pNew;
while (*pStr)
{
if ((IsDigital(*pStr) && !IsDigital(*(pNewTmp-1))) ||
(!IsDigital(*pStr) && IsDigital(*(pNewTmp-1)))) // 状态改变时就插入'*'号
{
*pNewTmp++ = '*';
}
*pNewTmp++ = *pStr++;
}
if (IsDigital(*(pNewTmp-1))) // 处理末尾是数字字符的情况
{
*pNewTmp++ = '*';
}
*pNewTmp = 0; // 加上结束符
}
int main()
{
char strOld[100];// "fds43d435f";
char strNew[150] = {0};
printf("please input......\n");
gets(strOld);
// 新串长度要足够插入所有*号
InsertAsterisk(strOld ,strNew);
puts(strNew);
return 0;
}
打印结果如下