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

Đề tài: bài toán tìm số lần xuất hiện các phần tử xuất hiện trong 1 chuỗi

  1. #1
    Ngày gia nhập
    02 2008
    Nơi ở
    thành phố hồ chí minh
    Bài viết
    7

    Thumbs down bài toán tìm số lần xuất hiện các phần tử xuất hiện trong 1 chuỗi

    mình có bài toán này các bạn cùng giải cho xôm tụ nào
    tìm số lần xuất hiện các phần tử trong 1 chuỗi
    vd:akaha1211
    a xuất hiện 3 lần
    k xuất hiện 1 lần
    h xuất hiện 1 lần
    1 xuất hiện 3 lần
    2 xuất hiện 1 lần

    C++ Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. #include<stdio.h>
    5. void main()
    6. {
    7. clrscr();
    8. char s[100];
    9. gets(s);
    10. inl l=strlen(s),d[255];
    11. for(int i=0;i<l;i++)
    12.     d[s[i]]=0;
    13. for(i=0;i<l;i++)
    14.     d[s[i]]++;
    15. for(i=0;i<l;i++)
    16.     if(d[s[i]]!=0)
    17.     {
    18.         cout<<s[i]<<"xuat hien :"<<d[s[i]]<<"lan"<<endl;
    19.         d[s[i]]=0;
    20.     }
    21. getch();
    22. }
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 11-03-2008 lúc 12:40 AM. Lý do: cho code vào tag nâng cao

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Try this :
    C++ Code:
    1. struct Symbols{
    2.   bool operator()(char first, char second) const
    3.   {
    4.     int diff = isalpha(first) - isalpha(second);
    5.     if(diff)
    6.       return diff < 0;
    7.     return first < second;
    8.   }
    9. };
    10.  
    11. int main()
    12. {
    13.   std::string input = "The day after tommorow";
    14.  
    15.   std::map<char, int, Symbols> frequency;
    16.  
    17.   for(std::string::const_iterator iss = input.begin(), end = input.end();
    18.       iss != end; ++iss)
    19.     ++frequency[*iss];
    20.  
    21.   for(std::map<char, int, Symbols>::const_iterator iss = frequency.begin(), end = frequency.end();
    22.       iss != end; ++iss)
    23.   {
    24.     std::cout << iss->first << " occurs " << iss->second << " time(s).";
    25.     std::cout << '\n';
    26.   }
    27.   return 0;
    28. }

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - bác rok_rook dùng STL làm cho các newbie hơi bị khó xử...
    - Thế thì sao bác ko nêu ra ý tưởng của thuật tóan nhỉ..Dựa vào đó đọc nhanh understand hơn.
    - Mình thì mình có ý tưởng sau đây,nó rất cơ bản nên bạn tự coding nhé.
    + Dùng một mảng 1 chiều count[25] có 26 phần tử tượng trưng cho 26 chữ cái từ a..z;tương ứng count[0] đại diện cho a ....count[25] đại diện cho z.
    + Nếu mà xét tính hoa thường thì bạn tăng kích thước mảng lên jống theo thứ tự trong Ascii đó.
    + Duyệt chuỗi gặp chữ cái nào thì tăng tương ứng phần tử mảng count[] lên 1.
    + Cuối cùng duyệt mảng count và in ra kết quả
    Hạn chế:Nếu chuỗi gồm các chữ cái trùng nhau nhiều thì mảng count bị phí nhiều.Nhưng đó cũng là 1 cách!!bạn thử xem.
    No way, No success..

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

    Có thể dùng mảng char để minh họa thay cho mảng int. sau này đổi qua cũng ok, có thể giảm được bộ nhớ.

    Có cách nào khác ko nhỉ ?

    @R2: Cậu lì quá, mới nhắc trên kia kìa. Cứ viết cái STL hoài, nhớ kèm theo chú dẫn, hoặc giải thuật.

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - Mình đồng ý với kidkid là ta nên dùng mảng char[] thay cho mảng int[].Giảm đi bộ nhớ,vì bản thân char chính là int thôi mà...
    - Có cách giải mới nè..cách nay mình suy ra từ mảng 1 chiều thôi.
    + B1: Sắp xếp các phần tử của chuỗi (mảng các kí tự) theo thứ tự tăng dần.Y chang như sắp số nguyên thôi. ví dụ: char *str="sdghuda" >> "addghsu"
    + sau đó bạn duyệt từ str[1] đến str[n-1].Kèm theo đó là khởi gán thêm 1 biến dem = 1 (ngaòi vòng lăp nhé);
    -Tiếp nếu mà str[i]==str[i-1] thì dùng biến đếm dem = dem + 1, tiếp theo em kế bên (i++);
    - Nếu str[i] khác str[i-1] thì in ra cú pháp sau kèm theo reset biến dem=1

    Code:
    cout <<"Chu "<<str[i-1]<<"xuat hien "<<dem<<" lan\n";
    + Cứ như vậy đến lúc hết chuỗi nha bạn!!!
    Lưu ý: nhớ đặt THợp chuỗi rỗng nhé.
    Chúc thành công!!
    No way, No success..

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

  1. Lập trình C++ Mình muốn hỏi về bài toán tìm số lần xuất hiện của ký tự nhiều nhất trong chuỗi và số lần xuất hiện
    Gửi bởi ducky 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: 06-09-2013, 11:17 AM
  2. Xuất từ trong chuỗi không xuất nhưng cũng không báo lỗi
    Gửi bởi lovemoney trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 04-10-2012, 09:58 AM
  3. Xuất 1 kiểu dữ liệu là phân số mà không cần phải gọi qua hàm xuất trong class ?
    Gửi bởi giacmo1612 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 4
    Bài viết cuối: 24-03-2012, 02:38 PM
  4. Lập trình C++ tần xuất xuất hiện các kí tự trong chuỗi
    Gửi bởi ngoctrungbmt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 11-01-2011, 12:04 AM
  5. Bài tập C++ Đếm số từ và tần xuất xuất hiện của từ trong chuỗi?
    Gửi bởi cat_fet_bk 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: 17-11-2010, 10:10 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