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

cserver side programmingprogramming

假设我们有一个字符串 s。s 包含字母和数字。我们必须找到每个数字的频率并显示它们。为此,我们可以为每个数字(0 到 9)创建一个大小为 10 的数组,最初数组内的所有元素均为 0,然后当我们遇到数字时,只需增加该索引的值并最终将它们全部打印出来。

因此,如果输入为 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)

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

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

  • 用于初始化 i := 0,当 i < s 的大小,更新(将 i 增加 1),执行以下操作:

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

      • 将频率[s[i] - '0' 的 ASCII] 增加 1

  • 初始化 i := 0,当 i < 10 时,更新(将 i 增加 1),执行以下操作:

    • if freq[i] > 0, then:

      • display (Number i , Freq 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)

相关文章