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打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意
修改,但是不要改变函数原型。
一定要保证编译运行不受影响
[cpp] view plaincopy
//////////////////////////////////////////////////////////////////////////
#include
#include
using
namespace
std;
bool g_flag[26];
void
stringFilter(const
char
*pInputStr,
long
lInputLen,
char
*pOutputS
tr)
{
assert(pInputStr !=
NULL);
int
i
=
0;
if
(pInputStr
==
NULL ||
lInputLen
<=
1)
{
}
return;
const
char
*p
=
pInputStr;
while(*p !=
'\0')
{
}
if
(g_flag[(*p
-
'a')])
{
}else{
p++;
pOutputStr[i++]
=
*p;
g_flag[*p
-
'a'] =
1;
p++;
}
pOutputStr[i]
=
'\0';
}
int
main()
{
memset(g_flag,0,sizeof(g_flag));
char input[]
char *output
=
=
"abacacde";
new
char[strlen(input)
+
1];
stringFilter(input,strlen(input),output);
cout<