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

Đề tài: Đếm ra số ký tự giống nhau của một chuỗi

  1. #1
    Ngày gia nhập
    01 2007
    Bài viết
    2

    Mặc định Đếm ra số ký tự giống nhau của một chuỗi

    Các bác cho em hỏi thuật giải bài này :
    Nhập một chuỗi bất kì. VD :Chuc mung cong dong C viet tro lai
    Đếm ra có 4 chữ C, có 1 chữ h,1 chữ m......
    Thanks nhiều
    Help Me

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Cái này bạn có thể dùng cây nhị phân.Hoặc dùng một mảng đếm cũng được.
    Về cây nhị phân bạn tự tìm hiểu nhé.
    Còn về mảng đếm bạn có thể hiểu như sau:
    int Count_str[94];
    khởi tạo for(int i=0;i<94;i++) Count_str[i]=0;//đưa bộ đếm về 0
    rồi bạn duyệt chuỗi của bạn, và lấy các ký tự chuyển sang kiểu ascii
    ví dụ: ký tự space có mã ascii là 32 thì bạn phải chuyển
    Count[ascii(ch)-32]++;//hoặc không chuyển sang thì bạn sử dụng luôn Count_str['ch'-32]++;
    //ở đây biến ch kiểu ký tự, mục đích lưu kí tự thứ i của chuỗi nguồn
    khi duyệt hết chuỗi thì duyệt Count_str để đưa ra thông tin các ký tự.
    Đó là ý kiến của mình
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  3. #3
    Ngày gia nhập
    01 2007
    Bài viết
    2

    Thank anh.Nhưng mà em vẫn chưa hiểu lắm.
    Help Me

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Cách của NT_Love là như thế này:
    vd chuối : Chao Mung Cviet Tro Lai .
    Đầu tiên cậu khởi động số kí tự là 0, sau đó cậu đếm gặp số nào thì tăng số đó lên. Mã kí tự đầu tiên là 32 . Còn số 94 thì tớ ko rõ lắm, đang lẽ ra thì chỉ có 52 kí tự hoa thường, 1 kí tự trắng, 10 kí tự số. Như vậy thì chỉ cần 63 thôi chứ nhỉ ?
    Việc kiểm tra thì như thế này vẫn được:
    ++ count[ch -'0'] ; // ascii của 0 là 32.

  5. #5
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    Cách của NT_Love là như thế này:
    vd chuối : Chao Mung Cviet Tro Lai .
    Đầu tiên cậu khởi động số kí tự là 0, sau đó cậu đếm gặp số nào thì tăng số đó lên. Mã kí tự đầu tiên là 32 . Còn số 94 thì tớ ko rõ lắm, đang lẽ ra thì chỉ có 52 kí tự hoa thường, 1 kí tự trắng, 10 kí tự số. Như vậy thì chỉ cần 63 thôi chứ nhỉ ?
    Việc kiểm tra thì như thế này vẫn được:
    ++ count[ch -'0'] ; // ascii của 0 là 32.
    Cái này mình làm với tất cả các ký tự có trong "Ngôn ngữ lập trình C" của tác giả Quách Tuấn Ngọc.
    Ở đây bắt đầu từ ký tự space(32) tới ký tự ~(126).
    Mà 126-32=94;
    Vậy thì mình chọn một mảng là Count_str[94] là hợp lý(Hợp lý cho cả những ký tự như ~, \ , ; ,...).
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  6. #6
    Ngày gia nhập
    07 2007
    Bài viết
    10

    Wink Đếm ra số ký tự giống nhau của một chuỗi

    Mình muốn nhập ký tự bất kỳ nên dùng thuật toán khác ^^
    Dùng 2 vòng lặp, rồi kiểm tra dần dần.
    Phòng trường hợp kiểm tra lại ký tự đã kiểm tra, mình dùng thêm một biến chuỗi lưu những ký tự đã kiếm tra.
    Bài mình như sau:

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. char a[300];
    5. void nhap()
    6. {
    7.    printf("Nhap vao mot chuoi: "); gets(a);
    8. }
    9. void xuat()
    10. {
    11.    long i,j,k,l=0;
    12.    char b[300];
    13.    memset(b,'\0',strlen(a)-1);
    14.    for(i=0;i<strlen(a)-1;i++)
    15.    {
    16.       k=0;
    17.       for(j=0;j<=l;j++)
    18.      if(a[i]==b[j])
    19.         k++;
    20.       if (k==0)
    21.       {
    22.      k=1;
    23.      for(j=i+1;j<strlen(a);j++)
    24.         if (a[i]==a[j])
    25.            k++;
    26.      printf("Ky tu %c da xuat hien: %ld lan\n",a[i],k);
    27.       }
    28.       b[l]=a[i];
    29.       l++;
    30.    }
    31. }
    32. int main()
    33. {
    34.    clrscr();
    35.    nhap();
    36.    xuat();
    37.    getch();
    38.    return 0;
    39. }

    Bài làm khá đúng, nhưng khi mình nhập với chuỗi dài thì nó cứ kêu bip bip, dù rằng chưa tới giới hạn
    Làm sao để nhập chuỗi kiểm tra với chiều dài dài thật dài?
    offline as always

  7. #7
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi hani Xem bài viết
    Mình muốn nhập ký tự bất kỳ nên dùng thuật toán khác ^^
    Dùng 2 vòng lặp, rồi kiểm tra dần dần.
    Phòng trường hợp kiểm tra lại ký tự đã kiểm tra, mình dùng thêm một biến chuỗi lưu những ký tự đã kiếm tra.
    Sao bạn không thực hiện :
    1.Cho nhập từng ký tự vô chuỗi
    2.Khi nhập được một ký tự thì addition vô tree
    3.Khi nhập xong chuỗi và enter thì nó hiện lên kết quả luôn(tất nhiên là duyệt cây rồi)
    Theo tôi như vậy là hay hơn cả.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    Chưa biết xài tree ^^
    offline as always

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

  1. Bài tập C++ Cách để so sánh 2 chuỗi kí tự giữa chuỗi nhập từ phím và chuỗi từ file xem có giống nhau không?
    Gửi bởi davilson18 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 09-06-2012, 09:47 AM
  2. Tìm chuỗi con gồm các số giống nhau liên tiếp dài nhất của một chuỗi cho trước
    Gửi bởi dailammoc trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 8
    Bài viết cuối: 07-02-2012, 09:03 PM
  3. Trừ các kí tự giống nhau giữa 2 chuỗi
    Gửi bởi quangbinhit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 100
    Bài viết cuối: 27-10-2011, 01:41 AM
  4. Algorithm Xác định mức độ giống nhau khi so sánh hai chuỗi tiếng Anh
    Gửi bởi nhuan07 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 24-10-2011, 12:51 PM
  5. Kỹ thuật C++ 2 chuỗi giống nhau nhưng lại ko bằng nhau khi so sánh
    Gửi bởi lightbringer trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 29-03-2011, 04:29 PM

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