经过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。

     这是华为2013的一个机试题,会好半天才想出来,用了三个for循环,可能有点繁琐,但只要慢慢看还是好理解的,

题目:

      通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”

#include<stdio.h>
#include<string.h>
void main()
{
	char a[]="abacacde";
	int length=strlen(a);//首先求长度

	for(int i=0;a[i]!='\0';i++) //先确定要一个字符
	{
		for(int j=i+1;j<length;j++) //检索当前位置的值和后面的所以值进行检索
		{
			if(a[i]==a[j])   //确定一个值后与整个字符串每一个字符进行比较
			{
				for(int k=0;k<length-j;k++)//移动删除j位置的值
				{
					a[j+k]=a[j+k+1];
				}
				length--;//删除一个后长度减一
				j=j-1; //退回到j开始的位置,因为跳出if后j会自加一次,所以要先减1
			}
		}
	}
	printf("%s\n",a);
}

经过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”
1楼ii1245712564昨天 16:42
博主直接建立一个长度26的bool数组visited,遍历一遍数组,如果visited[inputStr[i]-'a']为真的话,那就不输出,否则就输出,并令visited[inputStr[i]-'a']=true就可以啦
Re: zhou7530999434小时前
回复ii1245712564n我试了下, 确实感觉效率高了很多,谢谢 qeesung