//------------------------------------------------------------------------
#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 ".
Подскажите пожалуйста, где я ошибся.
но. если мы вспомним, что обычный символ - это байт (нафиг иникод), то посчитать можно сильно проще:
int Table[256]; ZeroMemory(Table, sizeof(Table));
AnsiString S = Memo1->Text;
for (int i = 1; i <= S.Length(); i++) Table[(unsigned char) S]++;
Но мне надо написать не сколько всего символов в строке, а сколько каждый символ строки встричается в строке.
// буква xе - столько-то штук, буква zю - столько-то штук и тд
фаф
Результат такой
Символ ф встречается 1 раз
Символ а встречается 1 раз
Символ ф встречается 2 раз
А как сделать чтобы был результат такой
Символ ф встречается 2 раз
Символ а встречается 1 раз
Код:
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) + " раз");
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) + " раз");
Программа начала работать как я хотел.