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

viết bằng C++ đc ko ạ?

1 Like

Được, sau đó chuyển sang C# là xong.

1 Like

thế tối e thử viết bằng C++. :smile:
mà a hướng dẫn làm việc với file bằng ngôn ngũ C đi a. tuần sau bọn e chữa bài tập mà bầy giờ e cứ làm xong rồi test lại ra kết quả linh tinh ạ. :frowning:

1 Like

À, tự dưng anh nghĩ nhớ ra cái này, anh viết bằng C. Em biết C không?

Code mới ở đây

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

int main()
{
    char * s = "le tran dat";
    int count[26] = {0};
    int i;
    for(i = 0; i < 26; ++i)
        count[s[i] - 'a']++;
    for(i = 0; i < 26; ++i)
        if(count[i])
            printf("%c %d\n", i+'a', count[i]);
    return 0;
}

ô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
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?