描述
找出字符串中第一个只出现一次的字符
数据范围:输入的字符串长度满足 1≤n≤1000
输入描述:
输入一个非空字符串
输出描述:
输出第一个只出现一次的字符,如果不存在输出-1
示例1
输入:
asdfasdfo
输出:
o
解题思路:
我的想法是用一个结构体数组来依次记录每一个字符,及其出现的次数,最后遍历这个结构体数组的次数,出现第一个次数为1的就打印这个下标对应的字符,如果遍历完后仍未找到只出现一次的字符,就打印-1。
代码如下:
#include <stdio.h>
#define N 1000
typedef struct record
{
char ch; //记录出现的字符
int cnt; //出现字符的次数
}record;
int main()
{
char str[N];
record rec[N]={0}; //记录数组初始化为0
int i=0,j=0,k;
gets(str);
while(str[i]!='\0')
{
if(!i) //第0个字符,直接存储到记录数组的第0个元素中
{
rec[j].ch=str[i];
rec[j].cnt++;
j++;
}
else
{
for(k=0;k<j;k++) //遍历记录数组,查看是否已经出现过
{
if(str[i]==rec[k].ch)
{
rec[k].cnt++; //之前出现,次数++
break;
}
}
if(k==j) //遍历完记录数组,之前没出现过,将此字符加入记录数组
{
rec[j].ch=str[i];
rec[j].cnt++;
j++;
}
}
i++;
}
for(i=0;i<j;i++) //遍历记录数组
{
if(rec[i].cnt==1) //第一个出现次数为1的字符,打印,并跳出循环
{
printf("%c\n",rec[i].ch);
break;
}
}
if(i==j) //未找到出现次数为1的字符,打印-1
printf("-1\n");
return 0;
}