怎么在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母
如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母
我在写这个程序时突然想起一个问题,就是C语言里给int一维数组初始化赋值的问题,比如我写:
int index[11]={0}; 那么此时数组中所有的元素初始化值均为0;但是我写:
int index[11]={-1};此时我以为所有元素的值均为-1了,其实不是这样的,当{}中的值的个数小于数组元素个数时,只有数组前面对应的元素被赋值了,而后面多余的元素被默认初始化为0了,所以这句话执行后,只有index[0]的值为-1,而其余元素均为0;但是如果我这样写:
int index[11]; 那么你也不要天真地以为所有元素默认值均为0,其实不然,这样写的话,所有元素的值均为随机值。
这就是数组初始化时我们应该注意的地方。
好了,下面说说这个算法:
源代码如下:
#include <iostream> using namespace std; char findIt(const char *str); int main() { char str[]="iamastudenti"; cout << findIt(str) << endl; return 0; } char findIt(const char *str) { int count[26]={0}; int index[26]={0}; //注意int数组初始化赋值时,如果写成={-1}是不能给所有元素初始化为-1的,只有第一个元素是-1,其余为默认值0 unsigned int i; int pos; for(i=0;i<strlen(str);i++) { count[str[i]-'a']++; //记录该字母出现的次数 // cout<<count[str[i]-'a']<<endl; if(index[str[i]-'a']==0) { index[str[i]-'a']=i; //记住该字母第一次出现时的索引 } } pos=strlen(str); for(i=0;i<26;i++) { if(count[i]==1) //找到只出现一次的字母 { if(index[i]!=-1&&index[i]<pos) //在只出现一次的字母中找出索引值最小的即可 { pos=index[i]; } } } if(pos<strlen(str)) return str[pos]; return '\0'; }
- 1楼CaiLongX昨天 10:47
- 这个代码是什么字体啊,请问?