【笔试题】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; }
相关文章推荐
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'
- 【C语言【面试题】【笔试题】题目:在字符串中找出第一个只出现一次的字符。
- C++中修改文件夹名以及文件名
- C++中修改文件夹名以及文件名
- c语言之sizeof 与 strlen理解
- 【转载】深入理解c++的右值引用
- C++第十二课 数组与指针
- C++primer学习:模板编程(2):类模板的定义
- 【原创】深入理解c++的右值引用
- MinGW c++ compiler zlib1.dll missing error?
- 合并两个有序的链表
- c++常量头文件的书写
- c/c++程序优化
- 链表中的倒数第k个节点
- 3-4 计算长方形的周长和面积--SDUT
- C++11:右值引用和转移赋值
- 3-3 构造函数的调用(高级)--SDUT
- Eclipse下配置C++多线程pthread.h
- Eclipse 下C++ 多线程 pthread.h1
- c语言中的指针