PDA

View Full Version : Xem giúp bt tìm kí tự nào xuất hiện nhiều nhất



Pho-bo
01-05-2010, 17:12
Đề: Nhập vào 1 chuỗi, kiểm tra xem chữ nào xuất hiện nhiều nhất, niếu có 2 chữ cùng số lần xuất hiện nhiều thì xuất 2 chữ đó luôn.
vd:dien dan tin hoc
xuất ra: chữ n xuất hiện 2 lần


#include<iostream.h>
#include<string.h>
void NhapChuoi(char *s)
{
cout<<"nhap vao 1 chuoi:";
cin.getline(s,100);
}
void SapXep(char *s)
{
int n=strlen(s);
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(s[i]>s[j])
{
int tam=s[i];
s[i]=s[j];
s[j]=tam;
}
}
}

void XuatHienNhieu(char *s,int d[])
{
int n=strlen(s);
int dem=1;
int m=0;
char t;
for(int i=0;i<n-1;i++)
{
if(s[i]==s[i+1]||s[n]=='\0')
dem++;
else
{
if(dem>m)
{
m=dem;
t=s[i];
}
dem=1;
}
}
cout<<"Ki tu xuat hien nhieu nhat :"<<t<<" voi "<<m<<" lan";
}
void main()
{
char *s;
int d[100];
s=new char[100];
NhapChuoi(s);
SapXep(s);
XuatHienNhieu(s,d);

}

ý bài này là sắp xếp từ nhỏ đến lớn, niếu có 2 chữ trùng nhau thì dem tăng,niếu đếm nào lớn nhất thì xuất từ đó ra, nhưng niếu có 2 chữ cùng số lần xuất hiện lớn nhất thì k làm dc. Mong các pác chỉ giáo!

onminh
02-05-2010, 15:33
Đề: Nhập vào 1 chuỗi, kiểm tra xem chữ nào xuất hiện nhiều nhất, niếu có 2 chữ cùng số lần xuất hiện nhiều thì xuất 2 chữ đó luôn.
vd:dien dan tin hoc
xuất ra: chữ n xuất hiện 2 lần
ý bài này là sắp xếp từ nhỏ đến lớn, niếu có 2 chữ trùng nhau thì dem tăng,niếu đếm nào lớn nhất thì xuất từ đó ra, nhưng niếu có 2 chữ cùng số lần xuất hiện lớn nhất thì k làm dc. Mong các pác chỉ giáo!


#include<stdio.h>

void count(char *str)
{
const int size = 256;
char ascii[size];
for (int k = 0; k < size; k++) ascii[k] = 0;

while (*str) ascii[*str++]++;

printf("\nSo cac ky tu xuat hien trong xau:\n");
for (k= 33; k <size; k++)
if (ascii[k]) printf("Ky tu %c\t so lan: %d\n", k, ascii[k]);

int v=0;

for (k=33; k < size; k++)
if (ascii[k] > v) v = ascii[k];

printf("Cac ky tu xuat hien nhieu nhat (%d lan) la:\n", v);
for (k=33; k < size; k++)
if (ascii[k] == v) printf("%c\t", k);

}

void main()
{
char str[100];
printf("\nNhap xau: "); gets(str);
count(str);
}

Pho-bo
02-05-2010, 22:59
#include<stdio.h>

void count(char *str)
{
const int size = 256;
char ascii[size];
for (int k = 0; k < size; k++) ascii[k] = 0;

while (*str) ascii[*str++]++;

printf("\nSo cac ky tu xuat hien trong xau:\n");
for (k= 33; k <size; k++)
if (ascii[k]) printf("Ky tu %c\t so lan: %d\n", k, ascii[k]);

int v=0;

for (k=33; k < size; k++)
if (ascii[k] > v) v = ascii[k];

printf("Cac ky tu xuat hien nhieu nhat (%d lan) la:\n", v);
for (k=33; k < size; k++)
if (ascii[k] == v) printf("%c\t", k);

}

void main()
{
char str[100];
printf("\nNhap xau: "); gets(str);
count(str);
}

Bạn giải thích dùm mình được không? mình đọc vô k hiểu gì hết.

onminh
04-05-2010, 22:08
Hãy lấy giấy, bút ra. Giấy là bộ nhớ, bút ghi quá trình thay đổi thì hiểu liền mà, chỉ ngẫm nghĩ thôi thì phải cỡ ông Einstein.

vn.minh
04-05-2010, 22:21
Hãy lấy giấy, bút ra. Giấy là bộ nhớ, bút ghi quá trình thay đổi thì hiểu liền mà, chỉ ngẫm nghĩ thôi thì phải cỡ ông Einstein.
Bạn này viết code good thật :)
@Chủ thead : Vấn đề không khó đâu bạn, chúng ta có tối đa 256 ký tự, bạn này cho chứa trong mảng , với mỗi phần tử của mảng là 1 ký tự (Mã ascii), sau đó cứ duyệt cái chuỗi đưa vào, đụng ký tự nào lấy cái mảng có ký tự tương ứng + 1 lên thôi.
Ví dụ : a[92], mình duyệt cái chuỗi đụng chữ A thì lấy a[92] cộng thêm 1 vào thôi. ( Với 92 là mã ascii của chữ A hoa chẳng hạn).

Viết vậy nhìn rườm rà quá, đọc code dễ hiểu hơn á!

onminh
05-05-2010, 00:04
Bạn này viết code good thật :)
@Chủ thead : Vấn đề không khó đâu bạn, chúng ta có tối đa 256 ký tự, bạn này cho chứa trong mảng , với mỗi phần tử của mảng là 1 ký tự (Mã ascii), sau đó cứ duyệt cái chuỗi đưa vào, đụng ký tự nào lấy cái mảng có ký tự tương ứng + 1 lên thôi.
Ví dụ : a[92], mình duyệt cái chuỗi đụng chữ A thì lấy a[92] cộng thêm 1 vào thôi. ( Với 92 là mã ascii của chữ A hoa chẳng hạn).

Viết vậy nhìn rườm rà quá, đọc code dễ hiểu hơn á!

Đúng thế, phải động não một chút, dễ thôi mà.