C语言实现( 查找给定串中第一个只出现一次的字符。)

算法思想:
1.在C语言中,char类型的本质是一个1个字节的整型 .我们不妨使用一个数组,用字符对应的ASCALL码值作为数组的下标。字符在给定串中出现的次数,做为数组对应下标的元素值。由于无符号char类型最大值为255,故一个长为255的数组足以记录给定串中任意字符出现的次数(只考虑英文字符)。
2.遍历该数组,其中值为1的元素,其下标值就是给定串中只出现一次的字符的ASCALL码值。也就是下标值对应的字符在给定串中只出现一次。
3.依次查询这些字符在给定串中的地址,得出其中的最低地址,即为串中第一个只出现一次的字符。
不啰嗦了!上代码。

//在一个串中,找到第一个不重复的字符,并返回#include #include #includechar getch( char *str) { intcount[255] = { 0 }; //定义一个长度为255的数组,以字符的ascall码作为数组下标,在对应下标处,记录给定串中,每个字符出现的次数。 int i = 0; char *p = NULL, *tmp = NULL; //如果给定串中第i个字符不为0, 就把该字符转化成对应的ascall码,作为count数组的对应下标,并另其元素值自增,,然后指针i在加1,继续在给定串下一个位置继续判断 for ( ; str[i] ; ++count[ str[i++] ] ); for (i = 0; i < 255; ++i) { //ascall码为i的字符出现的次数,在给定串中是1次 if (count[i] == 1) {if ((tmp = strchr(str, i)) < p) //找到出现次数为1的字符的位置,与之前的出现次数为1的字符,比较在给定串的位置,p始终指向小的位置 { p = tmp; }else if(p == NULL) { p = strchr(str, i); }} } printf("%c\n", *p); return *p; }int main(void) { char str[] = "aabbcdMiifeklJHDFKHef"; char s1 = getch(str); printf("%c ", s1); system("pause"); return 1; }

【C语言实现( 查找给定串中第一个只出现一次的字符。)】

    推荐阅读