找到第一个只出现一次的字符

题目:

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。   

分析:

这道题是2006年google的一道笔试题。

ASCII码共有128个,所以可以建一个包含128个元素的数组,初始化为0。扫描字符串,出现某字符,就自增该字符

对应的ASCII值为下标的元素值!

代码如下:

[cpp] view
plain
copy

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.   
  5. int count[128];  //count数组存储每个字符出现的次数  
  6.   
  7. void CountTimes(char *str); //计算str数组中每个字符出现的次数  
  8.   
  9. int main()  
  10. {  
  11.     char str[100]; //存储字符串  
  12.     while (printf("Please input a string :  "),fgets(str,sizeof(str),stdin)!=NULL)  
  13.     {  
  14.         CountTimes(str);   
  15.     }  
  16.   
  17.     return 0;  
  18. }  
  19.   
  20. void CountTimes(char *str)  
  21. {  
  22.     int len,i;  
  23.     len=strlen(str)-1;  //fgets读入的字符串末尾会多一个换行符,ASCII值为10,故减一  
  24.     memset(count,0,sizeof(count));  
  25.   
  26.     for (i=0;i<len;i++)  
  27.     {  
  28.         count[str[i]]++;  
  29.     }  
  30.   
  31.     //下面做法是错误的,感谢tongjianfeng  
  32.     //for (i=0;i<128&&count[i]!=1;i++);//寻找第一个出现一次元素的下标  
  33.     //printf("The character which appears only once is  :  %c\n\n",i);  
  34.   
  35.     //修改如下:  
  36.     for (i=0;i<len;i++)  
  37.     {  
  38.         if (count[str[i]]==1)  
  39.         {  
  40.             printf("The character which appears only once is : %c\n\n",str[i]);  
  41.             return ;  
  42.         }  
  43.     }  
  44.       
  45. }  
时间: 2024-10-10 09:56:53

找到第一个只出现一次的字符的相关文章

剑指offer系列之三十三:第一个只出现一次的字符

题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 第一个只出现一次的字符是关键,就意味着需要所有的字符进行出现次数的统计,所以我们需要两次遍历:第一次获取每个字符出现的次数:第二次把第一个只出现一次的字符找到.在Java中可以通过HashMap实现对每个字符次数的统计,由于在题目中并没有我们限定使用Java提供的内置结构,所以可以通过这种办法迅速找到第一个只出现一次的字符. 下面是基于这种思路的实现

[程序员面试题精选100题]13.第一个只出现一次的字符

[题目] 在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. [分析] [代码] /********************************* * 日期:2013-12-23 * 作者:SJF0115 * 题目: 13.第一个只出现一次的字符 * 来源:微软 * 分类:程序员面试题精选100题 **********************************/ #include <iostream> #include <cstring> us

《剑指offer》-找到字符串中第一个只出现一个的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是"l". 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符. class Solution { private: vector<char> vec; map<char, int>

android-Edittext 验证只允许输入数字和字符?

问题描述 Edittext 验证只允许输入数字和字符? 在程序中 edittext 验证,应该只允许输入字符.数字.下划线和连字符. edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Overr

数据结构与算法面试题80道

1.把二元查找树转变成排序的双向链表  题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向.    10  / \  6 14  / \ / \ 4 8 12 16  转换成双向链表 4=6=8=10=12=14=16.    首先我们定义的二元查找树 节点的数据结构如下:  struct BSTreeNode {  int m_nValue; // value of node  BSTreeNode *m_pLeft; // lef

算法面试题

1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16. 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of nod

C++中字符串查找操作的两则实例分享_C 语言

在一个字符串中找到第一个只出现一次的字符题目:     在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 分析:     一个字符串存储的都是ASCII字符,其ASCII范围不超过255.     因此可以再创建一个255个元素的数组存储字符串中字符出现的个数.     通过两次遍历即可求得. 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h" //查找字符串中第一个只出现一次

一些C语言中字符串的算法问题解决实例小结_C 语言

    字符串问题是面试中经常出现的问题,这类问题有很多,难以不一.下面是几道字符串的题目,网上都能找到解答,自己实现了一下,供网友参考.感觉算法重要的是要有正确的思路,实现起来不是问题.自己一定要多思考,这样收获可能会更多一点.         问题1:找两个字符串的最长公共子串.         具体描述,如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输入两个字

剑指offer系列之五十三:字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是"l". 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符. 这题与前面的第一个不重复的字符有些重复了,所以直接看代码(已被牛客AC): package com.rhwayfun.offer; impor