题目:
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析:
这道题是2006年google的一道笔试题。
ASCII码共有128个,所以可以建一个包含128个元素的数组,初始化为0。扫描字符串,出现某字符,就自增该字符
对应的ASCII值为下标的元素值!
代码如下:
[cpp] view
plaincopy
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int count[128]; //count数组存储每个字符出现的次数
- void CountTimes(char *str); //计算str数组中每个字符出现的次数
- int main()
- {
- char str[100]; //存储字符串
- while (printf("Please input a string : "),fgets(str,sizeof(str),stdin)!=NULL)
- {
- CountTimes(str);
- }
- return 0;
- }
- void CountTimes(char *str)
- {
- int len,i;
- len=strlen(str)-1; //fgets读入的字符串末尾会多一个换行符,ASCII值为10,故减一
- memset(count,0,sizeof(count));
- for (i=0;i<len;i++)
- {
- count[str[i]]++;
- }
- //下面做法是错误的,感谢tongjianfeng
- //for (i=0;i<128&&count[i]!=1;i++);//寻找第一个出现一次元素的下标
- //printf("The character which appears only once is : %c\n\n",i);
- //修改如下:
- for (i=0;i<len;i++)
- {
- if (count[str[i]]==1)
- {
- printf("The character which appears only once is : %c\n\n",str[i]);
- return ;
- }
- }
- }
时间: 2024-10-10 09:56:53