C语言字符串字母统计(指针)

从控制台输入一个字符串,长度与内容自定。统计各个字母在字符串中出现的次数。要求:1) 声明一个并在main()函数中调用,该函数实现对字母出现次数的统计,其参数包含一个字符指针;2) 不允许使用数组下标访问数组元素或为数组元素赋值;3) 忽略大小写;4) 仅需输出字符串中曾经出现过的字母的统计结果


#include <stdio.h>

int word[26]= {0};

void tong(char *s)
{
    while(*s)
    {
        if(*s>='a' && *s<='z')
            (*(word+(*s-'a')))++;
        else if(*s>='A' && *s<='Z')
            (*(word+(*s-'A')))++;

        s++;
    }
}

int main()
{
    char s[100];
    gets(s);
    tong(s);

    for(int i=0; i<26; i++)
    {
        if(*(word+i)>0)
        {
            printf("%c %d\n",'a'+i,*(word+i));
        }
    }

    return 0;
}

遍历字符串,用一个int a[26]来记录每个字符出现的次数就可以了,用指针指向数组的首地址,移动指针操作。
运行结果:

img

代码:


#include <stdio.h>


void fun(char* str)
{
    int a[26], i, * pn;
    //初始化a数组
    pn = a;
    for (i = 0; i < 26; i++, pn++)
        *pn = 0;
    //重置pn
    pn = a;
    while (*str != '\0')
    {
        if (*str >= 'a' && *str <= 'z')
        {
            i = *str - 'a';
            *(pn + i) = *(pn + i) + 1;
        }
        else if (*str >= 'A' && *str <= 'Z')
        {
            i = *str - 'A';
            *(pn + i) = *(pn + i) + 1;
        }
        str++;
    }
    //输出结果
    for (i = 0; i < 26; i++)
    {
        if (*(pn + i) != 0)
            printf("%c : %d\n", 'a' + i, *(pn + i));
    }
}


int main()
{
    char buf[1000];
    
    printf("请输入一个字符串:");
    gets(buf); //读取一行字符串
    fun(buf);

    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632