Lập trình C: Đếm số từ trong chuỗi

Bài toán:

Hãy đếm xem trong chuỗi có bao nhiêu từ (word)?

Video tham khảo:

Phân tích bài toán:

Giả sử ta có chuỗi “Dang Tran   Long  “, thì chuỗi này gồm 3 từ Dang, Tran và Long, không cần biết giữa các từ có bao nhiêu dấu cách, cũng không cần quan tâm phía đầu hay phía cuối chuỗi có dấu cách hay không. Làm thế nào để biết được đó là một từ trong chuỗi, ta có thể có được điều như sau:

    Nếu phát hiện thấy có ký tự dấu cách (space) và ngay sau đó là ký tự khác dấu cách thì đó là dấu hiệu của 1 từ.

Ở chuỗi “Dang Tran   Long  ” ta phát hiện thấy có 2 dấu hiệu của từ là ” T” và ” L” thì ta có được 2 từ, còn từ “Dang” thì không tuân theo dấu hiệu này.

Như vậy, ta có thuật toán là: Nếu ký tự nào đó là dấu cách và ngay sau nó là ký tự khác dấu cách thì ta đếm được 1 từ. Trường hợp ký tự đầu tiên của chuỗi không phải là dấu cách (chữ D ở chuỗi trên) thì ta đếm thêm 1 từ nữa.

Code tham khảo:

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

void nhapChuoi(char chuoi[])
{
    do
    {
        printf(“\nMoi ban nhap chuoi: “);
        gets(chuoi);
    }
    while(!(0<strlen(chuoi) && strlen(chuoi)<30));
}

void demSoTuTrongChuoi(char chuoi[])
{
    int i;
    int soTu=0;
    for(i=0; i<strlen(chuoi)-1; i++) ///Chỉ cho chạy đến ký tự cận cuối của chuỗi
    {
        if(chuoi[i]==’ ‘ && chuoi[i+1]!=’ ‘) ///vì trong phần điều kiện ta lấy ký tự i+1
        {
            ///Nếu ký tự chỉ số i là dấu cách và ký tự chỉ số i+1 không phải dấu cách thì ta đếm được 1 từ
            soTu++;
        }
    }
    if(chuoi[0]!=’ ‘) ///Nếu ký tự đầu tiên của chuỗi
    {
        ///không phải dấu cách thì ta cũng đếm được 1
        ///từ nữa.
        soTu++;
    }
    printf(“\nChuoi \”%s\” co %d tu.”,chuoi,soTu);
}

main()
{
    char chuoi[30];
    nhapChuoi(chuoi);
    demSoTuTrongChuoi(chuoi);

    return 0;
}