从键盘输入一段英文,找出长度最长和最短的单词,以及出现次数最多的英文字符.
网上有许多答案但思考地都不全面。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; }