#include<stdio.h> char firstsingle(char *arr) { char asc[255] = {0}; int i = 0; for(; arr[i] != '\0'; i++) { asc[arr[i]]++; } for(i = 0; arr[i] != '\0';i++) { if(asc[arr[i]] == 1) { return arr[i]; return '\0'; } } } int main() { char arr[10]; char ret; scanf("%s",arr); ret = firstsingle(arr); printf("%c\n",ret); return 0; }
在字符串中找出第一个只出现一次的字符,首先字符根据ASCLL变共有256种,则建立一个这么长的字符数组,从前往后检索,遇到就计数,如果是符合条件的firstsingle word 则计数后应该为1.
另外,asc[arr[i]]是将每次输入的字符arr[i]当成ASCII码存储在计算机中。
法2:经过更深次地学习,代码修改为(与指针数组结合),
#include<stdio.h> #define MAX 256//ASCII码共有256个 int main() { char *p = "abaccdeff"; char arr[MAX] = {0};//初始化 char *ptr = p; /*将指针数组p暂时保存在指针数组ptr中, 以免经过第一个while循环p已经到‘\0’处*/ while(*p)//遍历整个指针数组 { arr[*p]++; /* *p相当于接收的a,b,a..存放的是其ASCII,从0到1,...对其计数, 而arr[*p++]相当于arr[97]到arr[98],数组后移*/ p++;//后移 } p = ptr;//此处使用的刚好的保存好的"abaccdeff" while(*p)//再次遍历 { if(arr[*p] == 1)//只出现一次的字符 { printf("%c\n",*p);//输出满足字符的内容 break;//第一个只出现一次的字符 } else//否则继续寻找 { p++; } } return 0; }