Новые сообщения · Правила  
Страница 1 из 11
Модератор форума: Berestovskiy 
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » С, C++ » Строки в Си (Определить наиболее часто встречаемую букву.)
Строки в Си
Здравствуйте)
Помогите пожалуйста с задачей)
Найти частоту появления букв в строке. Определить наиболее часто встречаемую букву. Решили ее данным способом -
# include <stdio.h>
# include <stdlib.h>
# include <ctype.h>
# include <string.h>
void main () {
char name [100];
int A[50];
int I=0,N=26;
int max;
float kol = 0;
char S;
char c[10]="";
printf ("Vvedite text:\n");
for (I=0;I<N;I++) A[I]=0;
do {
S=getchar ();
name [I++]=S;
if (isalpha(S)==0) kol=kol;
else kol++;
switch(S) {
case 'a': A[0]++; break;
case 'b': A[1]++; break;
case 'c': A[2]++; break;
case 'd': A[3]++; break;
case 'e': A[4]++; break;
case 'f': A[5]++; break;
case 'g': A[6]++; break;
case 'h': A[7]++; break;
case 'i': A[8]++; break;
case 'j': A[9]++; break;
case 'k': A[10]++; break;
case 'l': A[11]++; break;
case 'm': A[12]++; break;
case 'n': A[13]++; break;
case 'o': A[14]++; break;
case 'p': A[15]++; break;
case 'q': A[16]++; break;
case 'r': A[17]++; break;
case 's': A[18]++; break;
case 't': A[19]++; break;
case 'u': A[20]++; break;
case 'v': A[21]++; break;
case 'w': A[22]++; break;
case 'x': A[23]++; break;
case 'y': A[24]++; break;
case 'z': A[25]++; break;
}
}
while (S!='\n');
name [--I]='\0';
max=0;
for (I=1;I<N;I++)
if (A[I]>A[max]) max=I;
c[0]=(97+max);
c[1]='\0';
printf ("%d\n Naib chasto vstrech Bukva %s, Chastota = %4.2f", A[max],c, A[max]/kol);
getch ();
}
Вопрос вот в чем как упростить решение. как загнать буквы тоже в массив?
хотела сделать цикл типа
for(s=97;s<122;s++)
for(i=0;i<n;i++) if (s1[i]==s) a[i]++; но данное неверно, то есть abcd...ответ - 1 1 1 1 0...
Может кто-то знает или сталкивался?)
Заранее огромное спасибо)

Добавлено (11.05.10, 12:00)
---------------------------------------------
аааа
в цикле если он видит букву а по другому код буквы 97 - А[i]=[код буквы-97]++

1 | Автор: jns | 2010-05-11, 12:00 | Изменено: jns - Вт, 2010-05-11, 12:03   |  Репутация: [ + 0 ]
В масиве symbols хранится сколько раз встречается та или иная буква в строке. Например в symbols['a'] будут данные о том сколько раз встречается сивол 'a' в строке. i и l вспомогательные переменные i используется в цикле for, а в l хранится длина строки. max - это код символа который встречается чаще всего, а maxi его индекс в строке. Ничего сложного)))

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main(void)
{
int symbols[256];
memset( symbols, 0, sizeof(int) * 256 );
int i, l;
int max = 0, maxi = 0;
char string[256];
printf( "Enter a string: " );
scanf( "%s", string );
l = strlen( string );
for( i = 0; i < l; i++ )
if( (symbols[string[i]]+=1) > max )
{
max = symbols[string[i]];
maxi = i;
}
printf( "Naibolee chasto vstrechaemyi symvol '%c'", string[maxi] );
getch();
return 0;
}

2 | Автор: Mencey | 2010-09-07, 14:25 | Изменено: Mencey - Вт, 2010-09-07, 14:25   |  Репутация: [ + 0 ]
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » С, C++ » Строки в Си (Определить наиболее часто встречаемую букву.)
Страница 1 из 11
Поиск: