Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчет слов в ListBox 
:(
    Опции темы
lotax
  Дата 4.7.2005, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Здравствуйте, пожалуйста помогите разобраться, есть проблема: есть listbox в нем список состоящий из :
String1
String2
String1
String1
String3
String2
String2
String2
String3

не подскажете как мне подсчитать каждое слово, тоесть у меня должен быть такой результат:
String1 (count:3)
String2 (count:4)
String3 (count:1)

если можно пример.





--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Satana
Дата 4.7.2005, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



ну у тебе нужно посчитать количество пробелов +1.
т.е. получится чтото вроде этого:

Код

for j:=1 to ListBox1.items.count-1 do
begin
count:=count+1; //можно так
for i:=1 to length(ListBox1.items.strings[j]) do
begin
 if ListBox1.items.strings[i]=' ' then count:=count+1;
 if i=length(ListBox1.items.strings[j]) then count:=count+1; //а можно так, но нужно использовать чтото одно
end;
end;

на выходе у тебя в count должно быть общее количество слов.

Это сообщение отредактировал(а) Satana - 4.7.2005, 10:41


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
lotax
Дата 4.7.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



есть такой вариант
Код

var
a:array of integer;
k,i,j,t,iden:integer;
begin
k:=listbox1.Items.Count-1;
setlength(a,k+1);
for i:=0 to high(a) do
a[i]:=strtoint(listbox1.items.strings[i]);
for i:=0 to high(a) do
begin
t:=a[i];iden:=0;
for j:=0 to high(a) do
begin
if a[j]=t then iden:=iden+1;
end;
listbox2.Items.Add(inttostr(t)+' '+inttostr(iden));
end;
end;


--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Satana
Дата 4.7.2005, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



мой вариант проще но не гарантирует разбивку на слова если они будут разделены скажем не 1м а двумя пробелами


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Quadr0
Дата 4.7.2005, 11:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 22:33
  Вверх
lotax
Дата 4.7.2005, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



(string1, string2 - без пробелов) , У меня в итоге (по моему коду) формируются дубл. строки я в принципе могу убрать дубл. строки, но мне кажется есть решение проще, чем мое. smile
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Quadr0
Дата 4.7.2005, 11:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 22:34
  Вверх
Akella
Дата 4.7.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Нужно что-то вроде такого:
бежим циклом по списку и добавляем все слова в массив, но с проверкой

если слово уже в массиве то увеличиваем на 1

Структура строки в массиве такова

arr[i]:='слово::число'

пишем функцию по выдиранию и запихиванию числа в строку - 'слово::число'
Код

sStr := 'слово1::10';
...

Var
iCount:integer;
...
iCount:=Copy(sStr,POS(sStr,'::'),Length(sStr-POS(sStr,'::')));



в итоге получится
arr[1]:='слово1::10'
arr[2]:='слово::20'
...

Это сообщение отредактировал(а) dsergey - 4.7.2005, 16:03
PM MAIL   Вверх
lotax
Дата 4.7.2005, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



вообщем у меня вышло так :

Код

procedure TForm1.Button1Click(Sender: TObject);
var
a:array of integer;
k,i,j,t,iden:integer;
begin
k:=listbox1.Items.Count-1;
setlength(a,k+1);
for i:=0 to high(a) do
a[i]:=strtoint(listbox1.items.strings[i]);
for i:=0 to high(a) do
begin
t:=a[i];iden:=0;
for j:=0 to high(a) do
begin
if a[j]=t then iden:=iden+1;
end;
if ListBox2.Items.IndexOf(inttostr(t)+':'+inttostr(iden))=-1 then
listbox2.Items.Add(inttostr(t)+':'+inttostr(iden));
end;
end;

smile
Спасибо всем!!!!!!
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Akella
Дата 4.7.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



lotax
не выйдет
Добавлено @ 15:11
выйдет, если в списке только цыфры
PM MAIL   Вверх
lotax
Дата 4.7.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



я сделал примерно так
Код

работа с string
var
a:array of integer;
k,i,j,t,iden:integer;
begin
k:=listbox1.Items.Count-1;
setlength(a,k+1);
for i:=0 to high(a) do
a[i]:=listBox1.Items.IndexOf(listBox1.Items.Strings[i]);
for i:=0 to high(a) do
begin
t:=a[i];iden:=0;
for j:=0 to high(a) do
begin
if a[j]=t then iden:=iden+1;
end;
if ListBox2.Items.IndexOf(listBox1.Items.Strings[t]+':'+inttostr(iden))=-1 then
 listbox2.Items.Add(listBox1.Items.Strings[t]+':'+inttostr(iden));
end;
end;


Добавлено @ 15:17
Извиняюсь, за ошибки smile
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Akella
Дата 4.7.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



с пустыми строками работать не хочет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0933 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.