鱼C论坛

 找回密码
 立即注册
查看: 1776|回复: 1

[已解决]求助

[复制链接]
发表于 2022-1-14 17:31:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int chang, i = 0, j, num = 1, k;
    //chang表示用户输入字符串的长度,i和j用来循环计数的,num用来表示character数组的行长度,k用来排序时作为中间值
    char characters[100], character[100][2] = {0}, K;
    //characters数组用来存放用户输入的字符串,character这个二维数组用来存放characters中非重复部分元素及其出现次数,K用来排序时作为中间值
    printf("请用户输入字符串:");
    gets(characters);
    chang = strlen(characters);
    for(;i < chang;i++)
    {
        if(i == 0)
        {
            character[0][0] = characters[0];
            character[0][1] = 1;
        }
        else
        {
            for(j = 0;j < num;j++)
            {
                if(characters[i] == character[j][0])
                {
                    character[j][1] = character[j][1] + 1;
                    break;
                }
                else if(j == num - 1)
                {
                    character[i][0] = characters[i];
                    num = num + 1;
                    printf("num = %d\n", num);
                }
            }
        }
    }
    for(i = 0; i < chang - 1; i++)
    {
        for(j = i + 1;j < chang; j++)
        {
            if(character[i][1] > character[j][1])
            {
                k = character[i][1];
                character[i][1] = character[j][1];
                character[j][1] = k;
                K = character[i][0];
                character[i][0] = character[j][0];
                character[j][0] = K;
            }
        }
    }
    for(i = 0; i < chang; i++)
    {
        printf("字符%c出现的次数为%d\n", character[i][0], character[i][1]);
    }
    printf("字符%c出现的次数最多,为%d次\n", character[chang - 1][0], character[chang - 1][1]);
    return 0;
}

输入aaabbc后输出如图
为什么二维数组character中还存了三个空元素呢?
最佳答案
2022-1-14 22:02:41
本帖最后由 傻眼貓咪 于 2022-1-15 08:04 编辑

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char string[100], *p = string;
  5.     short chr[256] = {0}, *q = chr, m = -1, n = -1;
  6.     scanf("%s", string);
  7.     while(*p) chr[*p++]++;
  8.     for(int i = 0; i < 256; i++){
  9.         if(*(q+i)){
  10.             printf("字符 %c 出现的次数为 %hd 次\n", i, *(q+i));
  11.             if(*(q+i) > n){
  12.                 m = i;
  13.                 n = *(q+i);
  14.             }
  15.         }
  16.     }
  17.     printf("字符 %c 出现的次数最多,为 %hd 次", m, n);
  18.     return 0;
  19. }
复制代码
  1. aaabbc
  2. 字符 a 出现的次数为 3 次
  3. 字符 b 出现的次数为 2 次
  4. 字符 c 出现的次数为 1 次
  5. 字符 a 出现的次数最多,为 3 次
复制代码
1642152586(1).png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-14 22:02:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2022-1-15 08:04 编辑

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char string[100], *p = string;
  5.     short chr[256] = {0}, *q = chr, m = -1, n = -1;
  6.     scanf("%s", string);
  7.     while(*p) chr[*p++]++;
  8.     for(int i = 0; i < 256; i++){
  9.         if(*(q+i)){
  10.             printf("字符 %c 出现的次数为 %hd 次\n", i, *(q+i));
  11.             if(*(q+i) > n){
  12.                 m = i;
  13.                 n = *(q+i);
  14.             }
  15.         }
  16.     }
  17.     printf("字符 %c 出现的次数最多,为 %hd 次", m, n);
  18.     return 0;
  19. }
复制代码
  1. aaabbc
  2. 字符 a 出现的次数为 3 次
  3. 字符 b 出现的次数为 2 次
  4. 字符 c 出现的次数为 1 次
  5. 字符 a 出现的次数最多,为 3 次
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 12:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表