Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: cần xem gấp code về tìm ký tự trong chuỗi

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Mặc định cần xem gấp code về tìm ký tự trong chuỗi

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<malloc.h>
    
    int main()
    {
        
        char *a;
        a=(char*)calloc(300,sizeof(char));
        int i,n,j;    
        
        printf("Nhap chuoi ky tu : ");
        gets(a);
        
        n=strlen(a);
        
        //Khai bao mang bien dem
        int test[300];
        for (i=0;i<300;i++)
        test[i]=0;
        
        //Dem so lan xuat hien cua tung ky tu trong chuoi
        for (i=0;i<n;i++)
        { if (a[i]!=' ')
          {  for (j=i;j<n;j++)
             {if (a[j]==a[i])
                 test[i]++;}
          }
        }
        
        //Xac dinh so lan xuat hien nhieu nhat
        int max=0;
        for (i=0;i<n;i++)
        {   if (test[i]>max)
            max=test[i];
        }
        //Tim lai ky tu co so lan xuat hien nhieu nhat va xuat ra
        for (i=0;i<n;i++)
        {if (max==test[i])
          {  printf("\nKy tu co so lan xuat hien nhieu nhat la %c",a[i]);
             printf("\nSo lan xuat hien la : %d",max);
          }
        }
        
        getch();
        return 0;
        
    }
    đoạn câu trên em không hiểu dùng biến đếm là mảng thì sẽ có tác dụng gì ,và tại sao code tren xuất ra kết quả không bị trùng,vd như nhập chữ nguyen van a.chỗ nào giúp loại bỏ hết 1 chữ bị trùng

  2. #2
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    Trích dẫn Nguyên bản được gửi bởi behoclaptrinh1993 Xem bài viết
    đoạn câu trên em không hiểu dùng biến đếm là mảng thì sẽ có tác dụng gì ,và tại sao code tren xuất ra kết quả không bị trùng,vd như nhập chữ nguyen van a.chỗ nào giúp loại bỏ hết 1 chữ bị trùng
    biến đếm là một mảng tức là với từng phần tử test[i] của mảng đếm, nó sẽ lưu trữ số lần xuất hiện tương ứng của từng phần tử a[i] của mảng a kể từ vị trị TỪ i TRỞ ĐI (tức là trước i nó sẽ không đếm(1).
    Bất cứ phần tử tại vị trí nào của mảng a nó đều đếm số lần xuất hiện cả, nhưng vì (1) nên các giá trị trùng sẽ k in ra.
    vd có dãy: aabca
    - đếm từ a[0] => a[0] tức là a xuất hiện 3 lần (test[0]=3)
    - đếm từ a[1] => a[1] tức là a xuất hiện 2 lần (test[1]=2) (do không đếm phần tử a[0] trước nó)
    ...
    tương tự đến:
    - đếm từ a[4] => a[4] tức là a xuất hiện 1 lần (test[4]=1) (do không đếm phần tử a[0] w a[1]trước nó)

    Và rồi với hàm Xac dinh so lan xuat hien nhieu nhat, ta có được max=3, tương ứng a[0]
    tiếp đó.....tự suy luận tiếp ha' @@

  3. #3
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Mình có 1 ý tưởng là thay vì tìm cách để hiểu 1 code phức tạp, bạn hãy thử đọc hiểu 1 code ngắn gọn hơn:

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int main()
    5. {
    6.     //Khai bao mang bien dem va khoi tao tat ca = 0
    7.     int dem[256] = {0};
    8.     unsigned char a[300];
    9.     unsigned char c = 0, *pa = a;
    10.  
    11.     printf("Nhap chuoi ky tu : ");
    12.     gets((char*)a);
    13.  
    14.     //Dem so lan xuat hien cua tung ky tu trong chuoi. Tim ky tu co so lan xuat hien cao nhat
    15.     for (; *pa; ++pa)
    16.         if (++dem[*pa] > dem[c]) c = *pa;
    17.     printf("\nKy tu co so lan xuat hien nhieu nhat la %c", c);
    18.     printf("\nSo lan xuat hien la : %d", dem[c]);
    19.  
    20.     getch();
    21.     return 0;
    22. }

  4. #4
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Mặc định code sai

    code của anh chicken không đúng ở chỗ .vd nhập nnn ccc ,nó chỉ có thể xuất ra chữ n thui

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi behoclaptrinh1993 Xem bài viết
    code của anh chicken không đúng ở chỗ .vd nhập nnn ccc ,nó chỉ có thể xuất ra chữ n thui
    Code đó in ra số lần xuất hiện của ký tự xuất hiện nhiều nhất. Bạn muốn in hết thì chỉ cần sửa một tí chỗ đoạn in, thêm vòng for từ 0->256 vào là được.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    09 2011
    Nơi ở
    Huế
    Bài viết
    0

    Mặc định cần xem gấp code về tìm ký tự trong chuỗi

    em hơi gà chút các bác có thể giải thích cho em hàm này là như thế nào ko
    a=(char*)calloc(300,sizeof(char))

    cái hàm calloc sao thấy nó dùm giống vs malloc thế

  7. #7
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Mặc định hàm calloc

    hàm calloc là dùng để cấp phát vùng nhớ cho con trỏ,nó cấp phát vùng nhớ lớn hơn malloc

  8. #8
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi behoclaptrinh1993 Xem bài viết
    hàm calloc là dùng để cấp phát vùng nhớ cho con trỏ,nó cấp phát vùng nhớ lớn hơn malloc
    Oái, cái này mới ^^ . Calloc cấp phát vùng nhớ lớn hơn malloc là sao ??
    calloc để cấp phát và khởi tạo mảng toàn giá trị 0 chứ sao lại thế nhầy ?

Các đề tài tương tự

  1. Bài tập C cho em hỏi về một vài dòng code ko hiểu trong xử lý chuỗi
    Gửi bởi trangthjeugja trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 26-12-2012, 10:56 AM
  2. code tìm chuỗi con trong chuỗi lớn bị lỗi khó hiểu..mọi người giúp mình vơi
    Gửi bởi giophieulang trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 30-05-2012, 10:35 AM
  3. Code xử lý chuỗi trong C | Giúp em sửa lỗi?
    Gửi bởi bqonline trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 20-04-2009, 09:23 AM
  4. code xử lý chuỗi ký tự nhập vào từ bàn phím trong C.
    Gửi bởi thanhnam46 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 20
    Bài viết cuối: 03-04-2008, 10:07 PM
  5. Code xử lý chèn, và nối chuỗi trong C++. Hàm chèn chuỗi không chạy được?
    Gửi bởi luckyluke trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 10
    Bài viết cuối: 01-03-2008, 04:56 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn