문자열 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)