从键盘输入一段英文,找出长度最长和最短的单词,以及出现次数最多的英文字符.
网上有许多答案但思考地都不全面。1.如何输出所有长度一样的最长或最短单词,即有多个单词一样长且为最长(最短)的时候?
2.寻找出现次数最多的英文字母时,如何解决大小写的问题?
哪位大神能给出真正全面,正确的程序?
新手求写个程序慢慢看,思路很多但真正写出来我才能学习到不是吗。
先对各位大神说声谢谢!!!
程序代码:#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define N 100
int main()
{
int i = 0, j, max, z[26] = {0};
char *p[N];
char c;
while (1)
{
p[i] = malloc(N);
memset(p[i], 0 , N);
for (j = 0; j < N; j++)
{
c = getchar();
if((c != ' ') && (c != '\n'))
{
p[i][j] = c;
if ((c >= 'a') && (c <= 'z')) //如果要区分大小写,可以在这里修改
{
z[c - 'a']++;
}
else if ((c >= 'A') && (c <= 'Z'))
{
z[c - 'A']++;
}
}
else
{
break;
}
}
if (c == '\n')
{
break;
}
i++;
}
max = (int)strlen(p[0]);
for (j = 1; j <= i; j++)
{
if (max < (int)strlen(p[j]))
{
max = (int)strlen(p[j]);
}
}
printf("最长的单词有:\n");
for (j = 0; j <= i; j++)
{
if (max == (int)strlen(p[j]))
{
printf("%s\n", p[j]);
}
}
printf("最多的字母有:\n");
max = z[0];
for (j = 1; j < 26; j++)
{
if (max < z[j])
{
max = z[j];
}
}
for (j = 1; j < 26; j++)
{
if (max == z[j])
{
printf("%c\n",j + 'a');
}
}
return 0;
}