Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

문자열에서 각 숫자의 빈도를 찾는 C 프로그램

<시간/>

문자열 s가 있다고 가정합니다. s에는 문자와 숫자가 모두 포함됩니다. 각 숫자의 빈도를 찾아 표시해야 합니다. 이를 위해 각 숫자(0에서 9까지)에 대해 크기가 10인 배열을 만들 수 있습니다. 처음에는 배열 내부의 모든 요소가 0이고, 숫자를 만나면 해당 인덱스의 값을 늘리고 마지막으로 모두 인쇄합니다.

따라서 입력이 s ="we85abc586wow236h69"와 같으면 출력은 (숫자 2, Freq 1) (숫자 3, Freq 1) (숫자 5, Freq 2) (숫자 6, Freq 3) (숫자 8, 주파수 2) (9번, 주파수 1)

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 크기가 10인 배열 주파수를 정의하고 모든 요소를 ​​0

    으로 초기화합니다.
  • initialize i :=0의 경우 i

    • s[i]가 숫자인 경우:

      • freq[s[i] - '0'의 ASCII]를 1 증가

  • i:=0 초기화의 경우, i <10일 때 업데이트(i 1 증가), 수행:

    • freq[i]> 0이면:

      • 디스플레이 (숫자 i, 주파수 주파수[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)\n", 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)