. 查找一个字符串中第一个只出现1(K)次的字符, 找到了返回这个字符,找不到返回-1 adaaabcc

查找一个字符串中第一个只出现1(K)次的字符,
找到了返回这个字符,找不到返回-1
 

  • 字符的大小不会超过256,所以我们先设置一个大小为256的数组
  • 开始进行字符串的遍历,将每一个字符作为数组的下标进行自增,(其实原理就是每一个字符都有自己对应的ASCII码值)
  • 将字符串中每一个字符对应下标位置加一,再次进行字符串的遍历,找出次数是1的字符,此字符就是我们要找的字符
  • 否则就是没找到返回-1

数组方式:需要输入参数

#pragma waring(disable:4996)
#include<stdio.h>
int first_once(char arr[])
{
    int count[256] = {0};
     char *p = arr;
    while(*p != '\0')
    {   
        count[*p]++;
        p++;
    }   
    p = arr;
    while(*p != '\0')
    {   
        if( count[*p] == 1)
            return *p; 
        else
            p++;
    }   
    return -1; 
}
int main()
{
	char arr[100] = "0";//如果不给数组开辟空间,可能会造成数组越界
                        //char arr[] = "0"数组大小就是0的大小,
                        //再传字符串会越界
	int b ;
    scanf("%s",&arr);
    b = first_once(arr);
	if(b != -1)
	{
    printf("%c\n",b);
	}
	else
	{
	printf("no\n");
	}
	return 0;
}

指针方式:不需要输入参数

#include<stdio.h>
int first_once(char* arr)
{
    int count[256] = {0};
     char* p = arr;
    while((*p) != '\0')
    {   
        count[*p]++;
        p++;
    }   
    p = arr;
    while(*p != '\0')
    {   
        if( count[*p] == 1)
            return *p; 
        else
            p++;
    }   
    return -1; 
}
int main()
{
	char* arr = "adaaabcc";//指针不能开辟大小指定空间,必须给指定字符串
	int b;
    b = first_once(arr);
	if(b != -1)
	{
    printf("%c\n",b);
	}
	else
	{
	printf("no\n");
	}
	return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值