Đếm số lần xuất hiện của chữ cái trong chuỗi bằng C

ôi, thuật toán quen thuộc năm xưa, cũng lấy giá trị cần đếm làm chỉ số.
nhưng năm xưa là pascal, năm nay là C…
nhớ cấp 3 quá a ạ.

1 Like

Chữ hoa thì sao??? :full_moon:
Runtime error: index <0

1 Like

Cố tình đấy :smile:

Người thảo luận để tìm ra cách giải hay cho một bài toán khó sẽ trở thành lập trình viên giỏi. Người hay hỏi bài tập thì không. Còn bạn thì sao?

Đưa ra hết thì bạn @nhu71958 sẽ lười suy nghĩ. Chỉ đưa ra hướng giải quyết thôi.

1 Like

Nhìn thấy kí tự space trong code là lỗi rồi =))

1 Like

kí tự backspace nào vậy @Gio ?

2 Likes

e nghĩ là khai báo count[122] là ổn ạ.

1 Like

#32 trong chuỗi tên đấy!
Mình viết nhầm :smiley:

2 Likes

Còn nhiều vấn đề nữa @htwap, ví dụ chữ thường thì - ‘a’ nhưng chữ hoa phải -‘A’. Cái này kiểm tra 1 cái được ngay sử dụng isalpha, islower, isupper là được.

sử dụng isalpha, islower, isupper là được.

Ở đây anh chỉ đưa ra hướng giải quyết thôi, anh không làm hết tất cả.

@nhu71958 em nắm được cách giải quyết không?

2 Likes

e sửa lại code của a chút xíu này.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *s = "Sang Coi Coc";
    int count[122] = {0};
    int n=strlen(s);
    for(int i=0;i<n;i++){
    	if(!count[s[i]]){
	    count[s[i]]=1;
	    for(int j=i+1;j<n;j++)
		if(s[j]==s[i])
		    count[s[i]]++;
	    }
	}
    for(int i=65;i<122;i++)
        if(count[i])
            printf("%c %d\n",i,count[i]);
    return 0;
}
1 Like

Đừng code kiểu này, dùng mấy cái hàm anh đề cập ở trên ấy

isalpha, islower, isupper

2 Likes

chạy đúng mà a.
=== này thì 20 này ===

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
    const char * s = "Le Tran Dat - Tu Hoc Lap Trinh - daynhauhoc.com";
#define NUM_CHAR 122
    int count[NUM_CHAR] = {0};
    int i;
    for(i = 0; i < strlen(s); ++i)
        if (isalpha(s[i]))
            count[s[i] - 'A']++;

    for(i = 'A'; i < NUM_CHAR; ++i)
        if(count[i])
            printf("%c %d\n", i+'A', count[i]);
    return 0;
}
3 Likes

uk…vâng…e cảm ơn m.n

1 Like

Hi @nhu71958, em giải quyết được không? nếu em hiểu thì tốt, còn không thì anh sẽ giải thích theo hướng C#. Vì các bạn đi xa sang lĩnh vực C quá.

2 Likes

ko hiểu lắm a à…hơi bị rối…có lẽ a giải thích giùm e theo hướng c# thì tốt hơn :smile:

1 Like

Cứ fill cho nó mảng 255 phần tử, sao các bạn tiết kiệm vậy nhỉ =))

1 Like

vậy ta có thể dùng trường hợp + 32 nữa là chữ hoa ko anh?

a ơi cho e hỏi là tại sao s[i] - ‘a’ nhỉ

Cho em hỏi lệnh:

count[s[i] - 'a']++;

có nghĩa là gì ạ.

Do:
'a' ứng với slot 0
'b' ứng với slot 1

'z' ứng với slot 25 :slight_smile:
'a' đến 'z' thực ra là dãy số :slight_smile: (ASCII code)

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?