關於華爲2014年機試題1

華爲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*&^%

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章