鱼C论坛

 找回密码
 立即注册
查看: 2501|回复: 3

[已解决]不懂

[复制链接]
发表于 2022-12-25 19:41:02 | 显示全部楼层 |阅读模式

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

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

x
编写一个函数void fun(char*q,int pp[])统计在q字符串中'a'到'z'26个小写字母各自出现的次数,并依次放在数组pp中。
#include <stdio.h>
#include <string.h>

void main()
{
  char tt[26];
  int ii;
  int pp[26];
  gets(tt);
  for(ii=0;ii<100;ii++)
  {
          if(tt[ii]='a')       {pp[0]++;}
          else if(tt[ii]='b')  {pp[1]++;}
          else if(tt[ii]='c')  {pp[2]++;}
          else if(tt[ii]='d')  {pp[3]++;}
          else if(tt[ii]='e')  {pp[4]++;}
          else if(tt[ii]='f')  {pp[5]++;}
          else if(tt[ii]='g')  {pp[6]++;}
          else if(tt[ii]='h')  {pp[7]++;}
          else if(tt[ii]='i')  {pp[8]++;}
          else if(tt[ii]='j')  {pp[9]++;}
          else if(tt[ii]='k')  {pp[10]++;}
          else if(tt[ii]='l')  {pp[11]++;}
          else if(tt[ii]='m')  {pp[12]++;}
          else if(tt[ii]='n')  {pp[13]++;}
          else if(tt[ii]='o')  {pp[14]++;}
          else if(tt[ii]='p')  {pp[15]++;}
          else if(tt[ii]='q')  {pp[16]++;}
          else if(tt[ii]='r')  {pp[17]++;}
          else if(tt[ii]='s')  {pp[18]++;}
          else if(tt[ii]='t')  {pp[19]++;}
          else if(tt[ii]='u')  {pp[20]++;}
          else if(tt[ii]='v')  {pp[21]++;}
          else if(tt[ii]='w')  {pp[22]++;}
          else if(tt[ii]='x')  {pp[23]++;}
          else if(tt[ii]='y')  {pp[24]++;}
          else if(tt[ii]='z')  {pp[25]++;}
  }
  for(ii=0;ii<26;ii++)
  {
   printf("%d",pp[ii]);
  }
}
最佳答案
2022-12-25 20:04:13
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 加这个头文件可以用 islower()

char str[1314];
int pp[30];
int len;

void fun(char * p, int pp[]){
    for(int i = 0; i < len; i++){
        if(islower(p[i])){ // 判断是不是小写
            pp[p[i] - 'a']++;  // c中这些字母按照 ASCII 码存储, a 的码是 97, b = 98 等等
            // 因此每个字母对应的位置就是减去 a(97) 的结果, 比如 'b' - 'a' = 1...
        }
    }
}

int main(){
    gets(str);
    len = strlen(str);  // 字符串长度

    fun(str, pp);

    for(int i = 0; i < 26; i++){
        printf("%d ", pp[i]);
    }
    
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-25 19:55:57 | 显示全部楼层
本帖最后由 jackz007 于 2022-12-25 19:57 编辑
#include <stdio.h>

#include <stdio.h>

int main()
{
        char pp[26] = {0} , tt[512]                                                    ;
        gets(tt)                                                                       ;
        for(int i = 0 ; tt[i] ; i ++) pp[tt[i] - 'a'] ++                               ;
        for(int i = 0 ; i < 26 ; i ++) if(pp[i]) printf("%c : %d\n" , 'a' + i , pp[i]) ;
}
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
abcde
a : 1
b : 1
c : 1
d : 1
e : 1

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-12-25 20:04:13 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 加这个头文件可以用 islower()

char str[1314];
int pp[30];
int len;

void fun(char * p, int pp[]){
    for(int i = 0; i < len; i++){
        if(islower(p[i])){ // 判断是不是小写
            pp[p[i] - 'a']++;  // c中这些字母按照 ASCII 码存储, a 的码是 97, b = 98 等等
            // 因此每个字母对应的位置就是减去 a(97) 的结果, 比如 'b' - 'a' = 1...
        }
    }
}

int main(){
    gets(str);
    len = strlen(str);  // 字符串长度

    fun(str, pp);

    for(int i = 0; i < 26; i++){
        printf("%d ", pp[i]);
    }
    
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-26 22:52:21 | 显示全部楼层
&#160;你第一个for循环,ii取不到100这么多的,数组越界了啊
&#160;for(ii=0;ii<100;ii++)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 02:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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