Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++ помогите найти ошибку

Aigerim Ученик (136), на голосовании 15 лет назад
задание следующее: надо найти количество букв алфавита(английского) в заданном слове(input="ab",output=a:1
b:1
c:0)
причем маленькие и большие-одинаковые(A и а)
моя прога:
#include <iostream>
using namespace std;
int CountLetters(string l)
{
int lettercount[27];

for(int i=65;i<91;i++)
{
char m=(char)(i);
char n=(char)(i+32);
if(l.find(m)!=-1||l.find(n)!=-1)
lettercount[i-65]++;
}
for(int i=0;i<27;i++)
{
char m=(char)(i+65);
cout<<m<<":"<<lettercount<i><<endl;>>s;
cout<
Дополнен 15 лет назад
не вместилось??
cout<
Дополнен 15 лет назад
я новичок
как сделать upcase?
и че за fined()?
Голосование за лучший ответ
-Egor- Мыслитель (6175) 15 лет назад
а метод fined() возвращает кол-во букв ?
если да то тоже самое тока забей на прописные
и сделай upcase всей исходной строки
D P Мудрец (11157) 15 лет назад
очень странная программа. И не без глюков. В частности, вы вероятно будете очень удивлены результатом ее работы при скармливании ей текста в кодировке utf-8.
Если же нам известно, что utf-8 или какая-либо другая многобайтная кодировка на вход никогда не попадет, то можно исползовать граздо более эффективный алгоритм работы. Если буква кодируется 1 байтом, то всего может быть 256 букв. Породим массив структур:

struct Letter
{
uint32_t type; // Битовые флаги типа символа - например печатный английский, какой нам нужен
uint32_t count; // Счетчик символов
};

struct Letter letter[ 256 ]; // А это - массив структур

Теперь все что нужно - это пройтись в цикле по слову и использовать код символа в качестве индекса в нашем массиве для попадания в структуру, в которой хранится тип символа и количество символов, которые уже были посчитаны. А уж увеличить этот счетчик на единичку вообще никакого труда не составляет. В результате за один проход вы получите полную информацию о количестве символов того или иного типа. Все что потом нужно - пройтись в цикле по массиву и вывести то, что нужно.

};
Похожие вопросы