Xuất phần tử xuất hiện nhiều nhất trong xâu

Khi làm xong bài thì chương trình chạy sai, mọi người giúp mình sửa lại với :blush: :blush: :

#include<bits/stdc++.h>

using namespace std;
int dem(string x, int l, int a) {
    int dem = 0;
    for (int i = 0; i < l; i++)
        if (x[i] == a) dem++;
    return dem;
}
int dem1sotrongday(string x, int l) {
    int dem2, dem1 = dem(x, l, x[0]), bien = 0;
    for (int i = 1; i < l; i++) {
        dem2 = dem(x, l, x[i]);
        if (dem1 < dem2) {
            dem1 = dem2;
            bien = i;
        }
    }
    return x[bien];
}
int main() {
    int l;
    string x;
    l = x.length();
    cin >> x;
    cout << dem1sotrongday(x, l);
    return 0;
}

Nhiều chỗ sai quá. Nên bỏ hết đi, lại lại từ đầu!

  • Định dạng mã khá ngứa mắt quá! (Đã sửa).
  • Truyền chuỗi (string) mà phải truyền thêm độ dài (int) nữa à? Tự tính trong hàm được mà!
  • Thực hiện trong 1 hàm và 2 vòng lặp lồng được mà.
  • Đoạn này rất vô nghĩa và không cần thiết! Tính độ dài trước khi nhập và cuối cùng, l không cần dùng đến!
    string x;
    l = x.length();
    cin >> x;

Nếu chuỗi chỉ các kí tự ANSI (256) thì dùng mảng để lưu (bảng tần suất) và so sánh tìm số lần xuất hiện nhiều nhất.


Sau tất cả, bạn muốn sửa để đoạn trên chạy đúng:

    string x;
    cin >> x;
    l = x.length(); // chuyển xuống
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?