数组实现

    1. #include <stdio.h>
    2. #include<stdlib.h>
    3. #include<math.h>
    4. #include<string.h>
    5. #include<stdbool.h>
    6. char up_to_low(char c) { // 转换大小写
    7. if ((c >= 'A') && (c <= 'Z')) {
    8. return (c+32);
    9. }
    10. return c;
    11. }
    12. bool is_alp(char c) {
    13. if ((c >= 'a') && (c <= 'z'))
    14. return true;
    15. return false;
    16. }
    17. void process() {
    18. int i = 0;
    19. int j = 0;
    20. char str[100] = { 0 };
    21. char* str_ptr[100]; // 指针数组,每个指针指向不重复的词
    22. int fre_array[100] = { 0 }; // 统计对应词频
    23. char vocabulary[100][15] = { 0 }; // 分割词汇
    24. int begin = 0;
    25. int end = 0;
    26. int count = 0; // 统计所有单词数
    27. int flag = 0; // 用于记录单词开头
    28. int dic_count = 0; // 统计不重复的词的数量
    29. int sign = 1;
    30. for (i = 0; i < 100; i++) str_ptr[i] = NULL;
    31. for (i = 0; i < 100; i++)fre_array[i] = 1;
    32. i = 0;
    33. while ((str[i++] = up_to_low(getchar()))!= EOF); // 读入字符串
    34. i = 0;
    35. while (str[i]) { // 分割字符串
    36. if (is_alp(str[i])&&(flag==0)) {
    37. begin = i;
    38. flag = 1;
    39. }
    40. if (is_alp(str[i]) && (!is_alp(str[i + 1]))) {
    41. end = i;
    42. for (j = 0; j < end - begin+1; j++) {
    43. vocabulary[count][j] = str[begin + j];
    44. }
    45. count++;
    46. flag = 0;
    47. }
    48. i++;
    49. }
    50. for (i = 0; i < count; i++) { // 查找
    51. for (j = 0; j < dic_count; j++) {
    52. if (strcmp(vocabulary[i], str_ptr[j]) == 0) { // 如果出现则对应的值+1
    53. fre_array[j]+= 1;
    54. sign = 0;
    55. }
    56. }
    57. if (sign) { // 如果未出现,指针数组指向该新的词汇
    58. str_ptr[dic_count]= vocabulary[i];
    59. dic_count++;
    60. }
    61. }
    62. int max = 0;
    63. for (i = 1; i < dic_count; i++) {
    64. if ((fre_array[i]>fre_array[max])) max = i;
    65. if ((fre_array[i] == fre_array[max])&& (strcmp(str_ptr[i],str_ptr[max])>0)) max=i;
    66. }
    67. printf("%s %d", str_ptr[max], fre_array[max]);
    68. }
    69. int main() {
    70. process();
    71. return 0;
    72. }