查找字符串中每个数字出现频率的C程序


假设我们有一个字符串s,s包含字母和数字。我们需要找到每个数字的出现频率并显示它们。为此,我们可以创建一个大小为10的数组来存储每个数字(0到9)的频率,数组元素初始值都为0。当遇到一个数字时,只需增加相应索引的值,最后打印所有结果。

因此,如果输入类似s = "we85abc586wow236h69",则输出将是:(数字2,频率1) (数字3,频率1) (数字5,频率2) (数字6,频率3) (数字8,频率2) (数字9,频率1)

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个大小为10的数组freq,并将所有元素初始化为0。

  • 循环遍历字符串s,从i=0到i小于s的长度:

    • 如果s[i]是数字,则:

      • 将freq[s[i] - '0'的ASCII码]加1。

  • 循环遍历数组freq,从i=0到i小于10:

    • 如果freq[i] > 0,则:

      • 显示 (数字i,频率freq[i])

示例

让我们看看下面的实现来更好地理解:

#include <stdio.h>
#include <string.h>
void solve(char *s){
    int freq[10] = {0};
    for(int i = 0; i < strlen(s); i++){
        if(s[i] >= '0' && s[i] <= '9'){
            freq[s[i] - '0']++ ;    
        }
    }
    for(int i = 0; i<10; i++){
        if(freq[i] > 0)
            printf("(Number %d, Freq %d)
", i, freq[i]);     } } int main(){     char *s = "we85abc586wow236h69";     solve(s); }

输入

"we85abc586wow236h69"

输出

(Number 2, Freq 1)
(Number 3, Freq 1)
(Number 5, Freq 2)
(Number 6, Freq 3)
(Number 8, Freq 2)
(Number 9, Freq 1)

更新于:2021年10月8日

5K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告