Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255

Как подсчитать вхождение каждого из символов в строку ListBox

06.05.2011, 16:25. Показов 4665. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, каким образом можно подсчитать количество каждого символа в строке ListBox!

Например:

Есть строка: abcdadcababcdadcabbb

Нужно посчитать сколько символов "а" в строке!

Thanks!)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2011, 16:25
Ответы с готовыми решениями:

Подсчитать вхождение каждого слова в подстроку
Такая задача: нужно подсчитать вхождение каждого слова в подстроку. Что-то сделал, но не верно int main(int argc, char** argv) { ...

Посчитать вхождение каждого слова в строку
Вынужден просить вашей помощи: необходимо написать программу, которая бы считала вхождение каждого слова в строку (сколько раз встречается...

Проверить вхождение каждого символа строки 1 в строку 2
Заданы две строки. Проверить вхождение каждого символа строки 1 в строку 2. Если какой-либо (первый слева) символ строки 1 не представлен...

24
 Аватар для Михаил Марюфич
15 / 15 / 5
Регистрация: 29.03.2011
Сообщений: 144
06.05.2011, 18:25
Я в этом деле, новичок, может можно как-то и поизящней
C++
1
2
3
4
5
6
7
int Kolvo_s=0;
AnsiString a;
a=ListBox1->Items->Strings[0];
while (int i=1<Length[a]){
if (a[i]=="a")
Kolvo_s++;
i++;}
Добавлено через 5 минут
Я в этом деле, новичек, может можно как-то и поизящней
C++
1
2
3
4
5
6
7
int Kolvo_s=0;
AnsiString a;
a=ListBox1->Items->Strings[0];
while (int i=0<Length[a])
if (a[i]=="а")
Kolvo_S++;
i++;}
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
07.05.2011, 13:07
Михаил Марюфич, если не уверен на 100 % в своём коде, то пока не проверишь,
никогда его не выкладывай, чтобы не быть посмешищем.

Вот это что такое???
C++
1
while (int i=1<Length[a])
Надо так:
C++
1
2
3
4
5
6
7
8
    
unsigned iCount = 0;
 
for (int i = 1; i <= ListBox1->Items->Strings[0].Length(); i++) {
    if (ListBox1->Items->Strings[0][i] == 'a') {
        iCount++;
    }
}
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 13:51  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
unsigned iCount = 0;
 
for (int i = 1; i <= ListBox1->Items->Strings[0].Length(); i++) 
{
        if (ListBox1->Items->Strings[0][i] == 'a')
               {
                iCount++;
                }
}
ShowMessage(iCount);
iCount - постоянно равен нулю!!

Почему не выполняется условие??
C++
1
2
3
4
if (ListBox1->Items->Strings[0][i] == 'a')
               {
                iCount++;
                }
Подскажите!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.05.2011, 14:17
C++
1
if (ListBox1->Items->Strings[0].Pos(i) == 'a')
C++
1
if (ListBox1->Items->Strings[0].SubString(i,1) == 'a')
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 14:29  [ТС]
Спасибо, LK.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.05.2011, 14:40
Пожалуйста, Infinity3000.
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 14:43  [ТС]
Кстате, может кому то и понадобиться! Текст загружаеться из *.txt

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//---------------------------------------------------------------------------
 
#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::BitBtn1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
ListBox1->Items->LoadFromFile(OpenDialog1->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
int iCount = 0;
for (int i = 0; i < ListBox1->Items->Count; i++)
{
    for (int j = 1; j <= ListBox1->Items->Strings[i].Length(); j++)
        {
        if  (ListBox1->Items->Strings[i].SubString(j,1) == 'a')
            {
            iCount++;
            }
        }
}
MessageDlg("Количество символов 'a' в тексте: " + IntToStr(iCount),
                    mtInformation, TMsgDlgButtons() << mbOK,  0) ;
}
//---------------------------------------------------------------------------
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.05.2011, 14:55
Цитата Сообщение от Maluda Посмотреть сообщение
... если не уверен на 100 % в своём коде, то пока не проверишь, никогда его не выкладывай, чтобы не быть посмешищем.
...
Надо так:
C++
1
    if (ListBox1->Items->Strings[0][i] == 'a') {
Maluda, если не уверен на 100 % в своём коде ...
2
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 15:06  [ТС]
Такой вопрос возник!!!

Если мне надо будет подсчитать, например, количество символов "А" и "В"!
Нужно ну будет для каждого символа так делать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int iCount = 0;
for (int i = 0; i < ListBox1->Items->Count; i++)
{
    for (int j = 1; j <= ListBox1->Items->Strings[i].Length(); j++)
        {
        if  (ListBox1->Items->Strings[i].SubString(j,1) == 'b')
            {
            iCount++;
            }
        }
}
MessageDlg("Количество символов 'b' в тексте: " + IntToStr(iCount),
                    mtInformation, TMsgDlgButtons() << mbOK,  0) ;
Или есть варианты как то сделать одним циклом!?

Добавлено через 4 минуты
Ну или примерно так! Только не проверял!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
int iCount = 0;
int jCount = 0;
for (int i = 0; i < ListBox1->Items->Count; i++)
{
    for (int j = 1; j <= ListBox1->Items->Strings[i].Length(); j++)
        {
        if  (ListBox1->Items->Strings[i].SubString(j,1) == 'a')
            {
            iCount++;
            }
        if  (ListBox1->Items->Strings[i].SubString(j,1) == 'b')
            {
            jCount++;
            }
        }
}
MessageDlg("Количество символов 'a' в тексте: " + IntToStr(iCount),
                    mtInformation, TMsgDlgButtons() << mbOK,  0) ;
MessageDlg("Количество символов 'b' в тексте: " + IntToStr(jCount),
                    mtInformation, TMsgDlgButtons() << mbOK,  0) ;
}
//---------------------------------------------------------------------------
Добавлено через 31 секунду
Ну и вывести еще можно все в одном сообщении!)

Мой вариант работает!))))))
Проще можно как то!??
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.05.2011, 15:11
куда уж проще... разве что вывести одним сообщением:
C++
1
2
3
MessageDlg("Количество символов 'a' в тексте: " + IntToStr(iCount) + 
           "\nКоличество символов 'b' в тексте: " + IntToStr(jCount),
           mtInformation, TMsgDlgButtons() << mbOK,  0) ;
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 15:16  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
куда уж проще... разве что вывести одним сообщением:
C++
1
2
3
MessageDlg("Количество символов 'a' в тексте: " + IntToStr(iCount) + 
           "\nКоличество символов 'b' в тексте: " + IntToStr(jCount),
           mtInformation, TMsgDlgButtons() << mbOK,  0) ;
Это я уже сделал) Спасибо!)
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
13.05.2011, 15:26
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Нужно посчитать сколько символов "а" в строке!
C++
1
2
3
4
5
#include <algorithm>
...
const char* line = ListBox1->Items->Strings[0].c_str();
int len = ListBox1->Items->Strings[0].Length();
ShowMessage( IntToStr(std::count(line, line + len, 'a')) );
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.05.2011, 15:26
хотя я бы сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  int iCount,jCount,len,cnt;
  AnsiString str;
  cnt = ListBox1->Items->Count;
  len = ListBox1->Items->Strings[i].Length();
  for (int i = 0; i < cnt; i++) {
    for (int j = 1; j <= len; j++) {
      str = ListBox1->Items->Strings[i];
      if (str.SubString(j,1) == 'a') {
        iCount++;
      }
      if (str.SubString(j,1) == 'b') {
        jCount++;
      }
    }
  }
  MessageDlg("Количество символов 'a' в тексте: "+
             IntToStr(iCount),
             "\nКоличество символов 'b' в тексте: "+
             IntToStr(jCount),
             mtInformation, TMsgDlgButtons() << mbOK, 0);
}
но это уже - дело вкуса
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 15:40  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
хотя я бы сделал так:
И я так сделаю!) Thanks!)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.05.2011, 15:41
местами поменять:
C++
1
2
len = ListBox1->Items->Strings[i].Length();
  for (int i = 0; i < cnt; i++) {
на
C++
1
2
  for (int i = 0; i < cnt; i++) {
    len = ListBox1->Items->Strings[i].Length();
1
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 15:50  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
но это уже - дело вкуса
у нас вкусы совпадают!

Добавлено через 43 секунды
Цитата Сообщение от LK Посмотреть сообщение
местами поменять:
C++
1
2
len = ListBox1->Items->Strings[i].Length();
  for (int i = 0; i < cnt; i++) {
на
C++
1
2
  for (int i = 0; i < cnt; i++) {
    len = ListBox1->Items->Strings[i].Length();
Ок, щас сделаю!)

Добавлено через 7 минут
Все четко работает!))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
int iCount = 0,jCount = 0,len,cnt;
  AnsiString str;
  cnt = ListBox1->Items->Count;
  for (int i = 0; i < cnt; i++)
  {
  len = ListBox1->Items->Strings[i].Length();
  {
    for (int j = 1; j <= len; j++)
    {
      str = ListBox1->Items->Strings[i];
      if (str.SubString(j,1) == 'a')
      {
        iCount++;
      }
      if (str.SubString(j,1) == 'b')
      {
        jCount++;
      }
    }
  }
 
}
MessageDlg("Количество символов 'a' в тексте: "+
             IntToStr(iCount) +
             "\nКоличество символов 'b' в тексте: "+
             IntToStr(jCount),
             mtInformation, TMsgDlgButtons() << mbOK, 0);
}
LK, была ошибка в MessageDlg! Но я испрасвил!)))))))))))

Спасибо!
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
13.05.2011, 19:28
LK, а ну смотри внимательно код!!!
И кто посмешище???

C++
1
2
3
4
5
6
unsigned iCount = 0;
 
for (int i = 1; i <= ListBox1->Items->Strings[0].Length(); i++) {
        if (ListBox1->Items->Strings[0][i] == 'a') {
                iCount++;
        }

Ничего тут не замечаешь????
C++
1
(ListBox1->Items->Strings[0][i]

Может быть так до тебя дойдёт
C++
1
2
const AnsiString sString = ListBox1->Items->Strings[0];
const char chChar = sString[i];
Добавлено через 4 минуты
И задача была вот такая

Цитата Сообщение от Infinity3000 Посмотреть сообщение
Нужно посчитать сколько символов
А не "сколько подстрок в строке"!
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
13.05.2011, 19:39  [ТС]
Maluda,

Возможно и твой код был правильный!! но он не считал символы! постоянно возвращал НОЛЬ!

iCount постоянно был равен НУЛЮ!
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
13.05.2011, 19:43
LK, можешь ещё сюда посмотреть, если не веришь!

А у Infinity ноль всегда, потому что он или с индексом напутал, либо сложил AnsiString с int, без приведения последнего к строке.
Миниатюры
Как подсчитать вхождение каждого из символов в строку ListBox  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2011, 19:43
Помогаю со студенческими работами здесь

Проверить вхождение каждого символа строки 1 в строку 2
Заданы две строки. Проверить вхождение каждого символа строки 1 в строку 2. Если какой либо (первый слева) символ строки 1 не представлен в...

Вхождение символов в строку
есть например строка: 51618641313518132158800188, необходимо проверить есть ли в этой строке цифры 1,2,3 как это решить?

Предикат, который продублирует вхождение каждого символа в строку
Создайте предикат, который продублирует вхождение каждого символа в строку.

Подсчитать общее вхождение в строку латинских букв
Дана строка символов. Подсчитать общее вхождение в строку латинских букв. Test: input: aa!220$G&quot;1o325A+5468.7 Z 5.!zz output: 8

Подсчитать все вхождение «abc» в строку и их удалить.
Дана строка, содержащая сорок латинских букв. Подсчитать все вхождение «abc» в строку и их удалить. Вывести на экран два варианта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru