题目:在字符串中找出第一个只出现一次的字符。
如输入“abaccdeff”,则输出'b'。
1、判断每个字符与其他字符有多少个不相同,定义数组str,如果第i个字符只出现一次,则str[i]为总字符数减1;出现两次,str[i]为总字符数减2,以此类推。
代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char arr[]="abaccdeff"; int i,j,size,str[15]={0}; size=strlen(arr); for(i=0;i<size;i++) { for(j=0;j<size;j++) { if(arr[i]!=arr[j])//判断每个字符与其他字符有多少个不相同 str[i]++; } } for(i=0;i<sizeof(str)/sizeof(str[0]);i++) { if(str[i]==size-1)//如果一个字符只出现一次,则str[i]为总字符数减1。 { printf("one of the first:%c\n",arr[i]); break; } } system("pause"); return 0; }
2、下标统计法:定义宏参数MAX,由于字符的ASCII范围为0~255共256个数,通过下标统计法求出各个字符出现的次数,然后经过while循环找到第一次只出现一次的字符。
代码如下:
#include<stdio.h> #include<stdlib.h> #define MAX 256 void find(char *str) { int arr[MAX]={0}; char *prt=str; while(*str) { arr[*str]++;//利用下标统计法求出各字符出现的次数 str++; } str=prt; while(*str) { if(arr[*str]==1) { printf("one of the first:%c\n",*str); break;//找到第一个只出现一次的字符就结束判断 } str++; } } int main() { char arr[]="abaccdeff"; find(arr); system("pause"); return 0; }