IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа со строками на С++, частота букв в тексте
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


Задача:программа должна выделять в тексте с русскими и английскими словами все русские буквы и определить наиболее часто повторяющиеся из них.
Подскажите можно ли на си++ задать массив 'а' до 'я' целых чисел для подсчета встречающихся букв?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






На С++ - можно... Только боюсь, решение тебе опять не подойдет, ибо это делается с привлечением STL...

Сделай проще: напиши функцию (скажем, LetterIndex()), определяющую порядковый номер буквы в алфавите (организуй строковую константу от 'а' до 'я', и смотри, на каком месте заданная буква встречается в этой строке), и простой массив:
int count[32]; // <--- По количеству букв в алфавите

и делай так:
++count[LetterIndex('д')];

чтобы увеличить счетчик буквы 'д'...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


Вот что написал:

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

int LetterIndex(char ch)
{ int i;
const char str[32]="абвгдеёжзийклмнопрстуфхцчшщъьэюя";
for (i=0;i<=32;i++)
if (ch==str[i]) return i;

}
int main(void)
{clrscr();
int i,j,k,count[32],max;
char a[32]="абвгдеёжзийклмнопрстуфхцчшщъьэюя";
char txt[10],rus[10],ch,maxch;

cin>>txt;
for (i=0;i<=9;i++)
for (j=0;j<=32;j++)
if (txt[i]==a[j])
{
k++;
rus[k]=txt[i];
}
for(i=0;i<=k;i++)
cout<<rus[i];
for (i=0;i<=k;i++)
for (j=0;j<=32;j++)
if (rus[i]==a[j]) ++count[LetterIndex(rus[i])];
max=count[0];
for (i=0;i<=32;i++)
if (count[i]>max) maxch=a[i];
cout<<maxch;
getch();
return 0;
}

но теперь не могу проверить, компилятор русские буквы не поддерживает.Может подскажите как это исправить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Тогда можно так (но учти, это решение привязано к кодировке... У меня, например, оно работать не будет - кириллицы в таблице символов нет - так что я даю только идею, проверяй сам):
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include <stdlib.h>

int LetterIndex(char ch) {
// Буква от "а" до "п" ?
if(ch >= (char)160 && ch <= (char)191) return (ch - 160);
else
// Буква от "р" до "я" ?
if(ch >= (char)224 && ch <= (char)239) return 16 + (ch - 224);
// Значит, вообще не русская буква
return -1;
}

int main(void) {
clrscr();
int i, k = 0, count[32], max, pos;
char txt[10],rus[10],ch,maxch;

cin >> txt;
for(i = 0; i < strlen(txt); ++i) {
if((pos = LetterIndex(txt[i])) > -1)
count[pos] += 1;
rus[++k] = txt[i];
}

maxch = count[0];
for(i=0;i<=32;i++)
if (count[i]>maxch) maxch=count[i];
cout<<maxch;
getch();
return 0;
}
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.09.2020 22:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name