- 题目描述(60分):
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
- 比如字符串“abacacde”过滤结果为“abcde”。
- 要求实现函数:
- void stringFilter(constchar*pInputStr, long lInputLen, char*pOutputStr);
- 【输入】 pInputStr: 输入字符串
- lInputLen:输入字符串长度
- 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;
- 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
- 示例
- 输入:“deefd” 输出:“def”
- 输入:“afafafaf” 输出:“af”
- 输入:“pppppppp” 输出:“p”
- */
- /*main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出*/
- /*当前你可以使用其他方法测试,只要保证最终程序能正确执行即可*/
- /*该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响*/
- /*
#include <stdio.h>
#include<stdlib.h>
//第一种写法
#define MAXCHAR256
void stringFilter(constchar *pInputStr, long lInputLen, char *pOutputStr)
{
int a[26] = {0};
int pos = 0;
long i, j;
for(i = 0, j = 0; i < lInputLen; i++)
{
pos = pInputStr[i] - 'a';//将出现的字符标记为1,下次出现同样的字符时就不再存储。
if(a[pos] == 0)
{
a[pos]++;
pOutputStr[j++] = pInputStr[i];
}
}
pOutputStr[j] = '\0';
}
//第二种写法
void stringFilter( const char *pInputStr,long lInputLen, char *pOutputStr)
{
inti,j,k,flag;
k = 1;
flag =1;
char *tempChar = pOutputStr;
tempChar[0]= pInputStr[0];
for(i=1;i<lInputLen;i++)
{
for(j=i-1;j>=0;j--)
{
if (pInputStr[i] == pInputStr[j])//将每个字符都与之前的字符相比较,看是否相同,这种做
法的效率没有第一种高。
flag = 0;
}
if (flag ==1 )
{
tempChar[k] = pInputStr[i];
k++;
}
flag =1;
}
tempChar[k]= '\0';
pOutputStr =tempChar;
}
int main()
{
char pInputStr[100] ="adfdietufkdf";
long lInputLen = 0;
char *pOutputStr;
//gets(pInputStr);
char *c = pInputStr;
while(*c++)
lInputLen++;
pOutputStr =(char*)malloc(sizeof(char)*lInputLen);
stringFilter(pInputStr,
lInputLen,
pOutputStr);
printf("%s\n",pInputStr);
printf("%s\n",pOutputStr);
system("pause");
return 0;
}