(定义串数组与字符数组[26],字符数组26个下标元素变量存放字母字符'a'-'z'。
定义整型数组[26],整型数组26个下标元素变量存放串对应字母a-z的统计个数)
例:输入:5b3a+4-hdeh5dh?(字母不计大小写)
输出:h 3
d 2
a 1
b 1
e 1
#include<stdio.h>
#include<string.h>
int main()
{
void number(char *p);
char str[100];
fflush(stdin);
gets(str);
number(str);
return 0;
}
void number(char* p)
{
char s[] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
int a[26] = {0};
while (*p != '\0') //字符串的结束符号位"\0"
{
for (int i = 0; i < 26; i++)
{
if (*p == s[i] || *p == (s[i] - 32))
a[i]++;
}
p++;
}
for(int i=0;i<25;i++)
for(int j=0;j<25-i;j++)
if (a[j] < a[j + 1])
{
int temp;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
char temp1 = s[j];
s[j] = s[j + 1];
s[j + 1] = temp1;
}
for(int i=0;i<26;i++)
if (a[i]!=0)
printf("%c:%d\n", s[i], a[i]);
}
你好 利用长度为26的int类型数组
遍历数组时 如果字母都是小写的话
将每一个字母字符(范围是str[i]>='a'&&str[i]<='z') str[i]-97得到的数字对应下标值++;即a[str[i]-97]++;
遍历结束 存好了次数和字母
输出时 再按你的要求下标+97转char类型 及对应次数为数组中的数字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char str[40];
//Node info[40];
int i, j, a[26] = { 0 };//存小写字母及其出现的次数 比如a[0]=3 表示字母‘a’出现了3次
gets(str);
for (i = 0;str[i] != '\0';i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
a[str[i] - 97]++;
}
for (i = 0;i < 26;i++)
{
int index = i; // index记录最大出现数字所在下标
for (j = 0;j < 26;j++) //遍历完下标index所在数字为最多出现次数的
{
if (a[index] < a[j])
index = j;
}
if (a[index] != 0)
printf("%c\t%d\n", index + 97, a[index]);
a[index] = 0; //打印过的字母置为0 不再参与判断
}
return 0;
}
截图