Vấn đề về chuỗi kí tự trong C

Mọi người cho em hỏi một tẹo :smile: em có làm bài tập về chuỗi kí tự, đề bài là “nhập 1 chuỗi kí tự rồi kiểm tra xem có bao nhiêu kí tự ‘a’ trong đó”

em đã làm và code như được như sau:

#include <stdio.h>
#include <conio.h>
int main()
{
    char s[1000];
    int i,n,t=0;
    fflush(stdin);
    printf("Hay nhap chuoi ki tu:");gets(s);
    //printf("Hay nhap so ki tu trong chuoi ki tu ban vua nhap \n(Bao gom ca khoang trang va dau) :");scanf("%d",&n);
    for(i=0;i<=1000;i++)
    {
        if(s[i]=='a') t++;
        else continue;
    }
    printf("\nChuoi vua nhap co %d ki tu 'a'",t);
}

nhưng khi compile và run nó lại ra thế này :

em đã sửa lại code ở những dòng cuối là như thế này :

   for(i=0;i<=1000;i++)
    {
        if(s[i]=='a') t++;
        else continue;
    }
    t=t-6;
    printf("\nChuoi vua nhap co %d ki tu 'a'",t);
}

và kết quả đã ra đúng :

vậy cho em hỏi tại sao lúc đếm nó lại cộng thêm 6 vào trong giá trị của biến t ạ ?

chạy tới 1 ngàn phần tử.
Nhưng chuỗi bạn nhập chỉ có vài phần tử.
-> các phần tử còn lại là các giá trị rác. Và vô tình nó trùng với 97 = ‘a’;
Để fix điều này bạn có thể thêm thư viện string.h
và chạy tới strlen(s)

3 Likes

bạn có thể giải thích kĩ hơn giúp mình về thư viện string.h cũng như hàm strlen(s) được không? ở trường thầy mình chưa giải thích kĩ về thư viện string.h cũng như các hàm của nó :smiley:

  • Cái sai của bạn là bạn đã duyệt vòng lặp vượt quá kích thước của xâu.
  • Bạn biết tại sao chuỗi có cái gọi là ký tự kết thúc chuỗii không \0, nó được dùng để kiểm tra chuỗi đã kết thúc chưa. Vòng for đơn giản như này:
for (i = 0; s[i] != '\0'; i++)
{
}

Hoặc dùng hàm strlen() như bạn @drgnz nói

2 Likes

@drgnz @Pham_Van_Hai thanks hai bạn nhiều :smile: cũng tại mình mới bắt đầu vào dạng bài tập chuỗi kí tự nên vẫn còn ngu ngơ :grin:

Nếu bạn chưa học về string.h thì làm như Pham_Van_Hai nói.

Sơ lược thì string.h là 1 thư viện dùng để xử lý chuỗi trong C, như stdio.h là để xử lý input và output (printf, scanf,…)
trong string.h có 1 hàm là strlen() để lấy chiều dài chuỗi. Đơn giản vậy thôi! :stuck_out_tongue:
Muốn tìm hiểu thêm thì đọc qua link này:
http://www.cplusplus.com/reference/cstring/

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