您的位置:首页 > 编程语言 > C语言/C++

【笔试题】C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'。

2015-11-01 16:18 651 查看
#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;
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  则输出'b'。