30/09/2018, 19:20

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

Mọi người cho em hỏi một tẹo 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 
(Bao gom ca khoang trang va dau) :");scanf("%d",&n);
    for(i=0;i<=1000;i++)
    {
        if(s[i]=='a') t++;
        else continue;
    }
    printf("
Chuoi 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("
Chuoi 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 ạ ?

*grab popcorn* viết 21:25 ngày 30/09/2018

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)

Minh Anh viết 21:30 ngày 30/09/2018

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ó

Pham Van Hai viết 21:36 ngày 30/09/2018
  • 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

Minh Anh viết 21:25 ngày 30/09/2018

@drgnz @Pham_Van_Hai thanks hai bạn nhiều 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ơ

*grab popcorn* viết 21:33 ngày 30/09/2018

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!
Muốn tìm hiểu thêm thì đọc qua link này:
http://www.cplusplus.com/reference/cstring/

Bài liên quan
0