查找一个字符串中第一个只出现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;
}