Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа со строками на С++
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Rudolf
Задача:программа должна выделять в тексте с русскими и английскими словами все русские буквы и определить наиболее часто повторяющиеся из них.
Подскажите можно ли на си++ задать массив 'а' до 'я' целых чисел для подсчета встречающихся букв?
volvo
На С++ - можно... Только боюсь, решение тебе опять не подойдет, ибо это делается с привлечением STL...

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

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

чтобы увеличить счетчик буквы 'д'...
Rudolf
Вот что написал:

#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;
}

но теперь не могу проверить, компилятор русские буквы не поддерживает.Может подскажите как это исправить?
volvo
Тогда можно так (но учти, это решение привязано к кодировке... У меня, например, оно работать не будет - кириллицы в таблице символов нет - так что я даю только идею, проверяй сам):
#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;
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.