華爲2014年機試題1:
通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個字符串過濾程序,若字符串中出現多個相同的字符,將非首次出現的字符過濾掉。
比如字符串“abacacde”過濾結果爲“abcde”。
要求實現函數:
void stringFilter( const char *pInputStr,
long lInputLen, char* pOutputStr );
【輸入】 pInputStr: 輸入字符串
lInputLen: 輸入字符串長度
【輸出】 pOutputStr: 輸出字符串,空間已經開闢好,與輸入字符串等長;
【注意】只需要完成該函數功能算法,中間不需要有任何IO的輸入輸出
示例
輸入:“deefd” 輸出:“def”
輸入:“afafafaf” 輸出:“af”
輸入:“pppppppp” 輸出:“p”
main函數已經隱藏,這裏保留給用戶的測試入口,在這裏測試你的實現函數,可以調用printf打印輸出
當前你可以使用其他方法測試,只要保證最終程序能正確執行即可,該函數實現可以任意修改,但是不要改變函數原型。一定要保證編譯運行不受影響。
程序如下:
#include <iostream>
void stringFilter( const char *pInputStr, long lInputLen, char *pOutputStr )
{
const char *p = pInputStr;
char *q = pOutputStr;
char *k = pOutputStr;
while( *p != '\0' )
{
while( q != k && !( *p == *q ) && q++ );
if( q == k ) *k++ = *p;
q = pOutputStr;
++p;
}
*k = '\0';
}
int main()
{
char *src = "aaabbbbcdeeeeeefgh12344556666****&&&^^^%%%";
char *des = new char[ strlen( src )+1 ];
stringFilter( src, strlen( src ), des );
std::cout << "result:" << des << "\n";
delete[] des; des = NULL;
}
輸出結果: result:abcdefgh123456*&^%