关闭

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

190人阅读 评论(0) 收藏 举报
分类:
#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; 
}

 

 

wKioL1Y1yFqT_TrPAAC0B2HBPlI672.jpg

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49882次
    • 积分:612
    • 等级:
    • 排名:千里之外
    • 原创:174篇
    • 转载:9篇
    • 译文:0篇
    • 评论:2条
    关于博主
    github:https://github.com/hanxiaojing Email: hanjing_1995@163.com 原51.cto: http://10740184.blog.51cto.com 欢迎来访~
    文章分类
    最新评论