Giả sử chúng ta có một chuỗi s chứa cả chữ cái và chữ số. Nhiệm vụ là đếm tần suất xuất hiện của từng chữ số (0-9) và hiển thị kết quả. Cách làm: tạo mảng freq kích thước 10 khởi tạo giá trị 0, duyệt qua chuỗi, nếu ký tự là chữ số thì tăng freq[ch - '0'] lên 1, cuối cùng in ra các chữ số có tần suất > 0.
Ví dụ, nếu s = "we85abc586wow236h69", thì đầu ra:
(Number 2, Freq 1) (Number 3, Freq 1) (Number 5, Freq 2) (Number 6, Freq 3) (Number 8, Freq 2) (Number 9, Freq 1)
Giải thuật
- Khởi tạo mảng freq[10] = {0}
- Duyệt từng ký tự của chuỗi, nếu là chữ số ('0'-'9') thì freq[ch - '0']++
- Duyệt i từ 0 đến 9, nếu freq[i] > 0 thì in "(Number i, Freq freq[i])"
Ví dụ minh họa
#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);
return 0;
}
Đầu vào
"we85abc586wow236h69"
Đầu ra
(Number 2, Freq 1) (Number 3, Freq 1) (Number 5, Freq 2) (Number 6, Freq 3) (Number 8, Freq 2) (Number 9, Freq 1)