Q21 Q22 字符串操作相关

本文介绍了两道编程题目,一是统计字符串中最常出现的字母及其出现次数;二是处理字符串中的字母,通过转换并显示处理结果。文章提供了完整的代码实现,并讨论了一些调试过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Q20 :百炼编号:2742 统计字符串

之前对字符串进行过处理,所以很快就有了思路,用一个26大小的数组来存储每个字母所出现的次数,数组的下标为对应的字母:如本题中使用的letterNum[26]

自己第一遍没有提交成功,错在的一位数组动态内存的分配上,没有很好的定义成功,忘记了给sizeof(int)乘以n,导致浪费了很长时间进行调试。

这道题的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i,n,len;
    scanf("%d",&n);
   // int a[n];
    //int maxNum[n];
   int *a=(int *)malloc(n*sizeof(int));
   int *maxNum=(int *)malloc(n*sizeof(int));
    int k=0;
    char str[1001]; 

    while(n--){
        getchar();
        gets(str);

        len=strlen(str);
        int letterNum[26]={0};
        for(i=0;i<len;i++)   //字母出现次数统计,初始都为0,每出现一次,进行加一一次。
        {
            letterNum[str[i]-'a']++;
        }
        maxNum[k]=letterNum[0];
        a[k]=0;
        for(i=0;i<26;i++)
        {
            if(letterNum[i]>maxNum[k])
            {
                maxNum[k]=letterNum[i];
                a[k]=i;
            }
            }

    k++;
}
    for(i=0;i<k;i++)
        printf("%c %d\n",a[i]+'a',maxNum[i]);
    return 0;
}

Q21 :百炼编号:2975  最难的问题

这道题貌似之前做过,所以处理的速度还是很快,但是还是遇到了一些细节的问题,需要debug才能调出来

具体思路是:用字符串对输入的信息进行存储,提取字母并进行转换处理,其余非字母的字符按照原样存储,然后将处理后的结果放在字符串数组中,将结果显示出来即ok。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char str[201];
    gets(str);
    //getchar();
    char output[101][201];
    int i,len;
    int j=0;
    while(strcmp(str,"ENDOFINPUT")!=0)
    {
        if(strcmp(str,"START")!=0&&strcmp(str,"END")!=0)
        {
         //对有用字符进行处理并存储
            len=strlen(str);
            for(i=0;i<len;i++)
            {
                if(str[i]>=70&&str[i]<=90)
                {
                    str[i]=str[i]-5;
                    //printf("%c\n",str[i]);
                }


                else if(str[i]>=65&&str[i]<=69)
                str[i]=str[i]+21;
            }
            strcpy(output[j],str);
           //printf("chulihou %s\n",str);
            j++;
        }
        gets(str);
       // printf("chulihouqian %s\n",str);
    }
    for(i=0;i<j;i++)
    printf("%s\n",output[i]);


    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值