Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Найти количество каждого символа в тексте

11K
10 апреля 2008 года
zuze
84 / / 07.03.2008
Я написал код

Код:
//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString str = Edit1->Text;
    int numsymbol = 1;
    int k = 1, j;
    for (int i = 1; i <= str.Length(); i++)
    {
       for (j = 1; j <= str.Length(); j++)
       {
         if (str[k] == str[j+1])
         {
            numsymbol += 1;
            str.Delete(j, 1);
         }
         else
            numsymbol = 1;
       }
       k += 1;
       Memo1->Lines->Add("Символ "+IntToStr(str[k])+" встречается
       "+IntToStr(numsymbol)+" раз");
    }
}
//------------------------------------------------------------------------


Я ввожу в edit1 например 12

А выскакивает ошибка

Ошибка такая.
Появляется окно Debagger Exception Notification с сообщением об ошибке
Project NumSymbol.exe raised exception class ERange Error with message ".

Подскажите пожалуйста, где я ошибся.
8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
ошибка вот: str[j+1], выход за границу строки. но это мелочь, так как вся эта функция, как бы это помягче сказать... <PUKE>

но. если мы вспомним, что обычный символ - это байт (нафиг иникод), то посчитать можно сильно проще:

int Table[256]; ZeroMemory(Table, sizeof(Table));
AnsiString S = Memo1->Text;
for (int i = 1; i <= S.Length(); i++) Table[(unsigned char) S]++;
11K
11 апреля 2008 года
zuze
84 / / 07.03.2008
Но мне надо написать не сколько всего символов в строке, а сколько каждый символ строки встричается в строке.
8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
так таблица и содержит количество КАЖДОГО символа в строке.
// буква xе - столько-то штук, буква zю - столько-то штук и тд
11K
11 апреля 2008 года
zuze
84 / / 07.03.2008
Я ввёл
фаф
Результат такой
Символ ф встречается 1 раз
Символ а встречается 1 раз
Символ ф встречается 2 раз

А как сделать чтобы был результат такой
Символ ф встречается 2 раз
Символ а встречается 1 раз
8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
 
Код:
int Table[256]; ZeroMemory(Table, sizeof(Table));
AnsiString S = Edit1->Text;
for (int i = 1; i <= S.Length(); i++) Table[(unsigned char) S]++;

Memo1->Lines->Clear();
for (int i = 0; i < 256; i++) if (Table) Memo1->Lines->Add("Символ " + AnsiString((char) i) + " найден " + IntToStr(Table) + " раз");
11K
11 апреля 2008 года
zuze
84 / / 07.03.2008
Большое спасибо "Zor"!!!
Программа начала работать как я хотел.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог