今天看到一道華爲的題,描述如下
以下是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;
}
打印結果如下