22.01.2009, 20:03
общий
это ответ
Здравствуйте, Понаморенко Андрей Андреевич!
Не ясно при чем тут цикл Вами написанный. Вот программа на C++. Программа тестировалась на MS Visual Studio 2008.
Приложение:
// Условие задачи.
// Пользователь вводит строку, программа выводит на экран все символы которые есть в строке и сколько раз
// они повторяются.
// Важно!!!
// Для корректного отображения русских букв в консоли
// зайдите в свойства консоли(нажав на пиктограмме консоли в левом верхнем углу окна)
// и установите шрифт Lucida Console
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <windows.h>
#ifdef max
#undef max
#endif
using namespace std;
// Класс счетчик
class counter
{
private:
wchar_t _letter; // Символ
unsigned _count; // Сколько раз встречается
public:
counter(wchar_t letter,unsigned count=0)
:_letter(letter)
,_count(count)
{}
// Оператор инкремента
counter operator++()
{
_count++;
return *this;
}
// Оператор равенства
bool operator==(const wchar_t letter)const
{
return _letter==letter;
}
// Оператор "меньше"
bool operator<(const counter& Counter)const
{
return _letter<Counter._letter;
}
// Оператор потокового вывода
friend wostream& operator<<(wostream& stream,counter& Counter)
{
stream<<Counter._letter<<" - "<<Counter._count;
return stream;
}
};
// Здесь хранится таблица символов
vector<counter> letters;
// Возвращает ссылку на счетчик
counter& getCounter(wchar_t letter)
{
vector<counter>::iterator it=find(letters.begin(),letters.end(),letter);
if(it==letters.end())
{
counter newCounter(letter);
letters.push_back(newCounter);
return letters[letters.size()-1];
}
return *it;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
wcout<<"Введите строку для разбора:"<<endl;
wstring str;
getline(wcin,str);
for(wstring::iterator it=str.begin();it!=str.end();it++)++getCounter(*it);
sort(letters.begin(),letters.end());
wcout<<"Получена следующая таблица символов:"<<endl;
for(vector<counter>::iterator it=letters.begin();it!=letters.end();it++)wcout<<*it<<endl;
system("PAUSE");
return 0;
}