今天看到一道华为的题,描述如下
以下是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; }
打印结果如下