Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2014, 19:10   #1
gor_ais
Новичок
Джуниор
 
Регистрация: 08.03.2014
Сообщений: 4
По умолчанию Программа считающая количество символов в строке.

Вот код программы, которая должна считать количество символов в строке. НО почему количество символов умножается на 2(т.е. если в поле Edit пишем слово "привет", то он показывает не 6, а 12 символов)?

Код:
procedure TForm1.Button1Click(Sender: TObject);
 begin
 Edit2.Text:=IntToStr(Length(Edit1.Text));
 end;

Последний раз редактировалось Stilet; 08.03.2014 в 19:24.
gor_ais вне форума Ответить с цитированием
Старый 08.03.2014, 19:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наверное потому что строка в юникоде. А там два байта на символ.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.03.2014, 19:43   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Наверное потому что строка в юникоде. А там два байта на символ.
не, вряд ли.
Вот если бы автор вопроса сделал SizeOf(Edit1.Text), тогда да, размер одного символа в байтах имел бы значение.
А в данном случае Length(s) всегда возвращает длину строки в КОЛИЧЕСТВЕ СИМВОЛОВ, поэтому не зависит от одно- или много-байтной кодировки одного символа...

Включив телепатор, я подозреваю, что учитываются пробелы (скорее всего в конце Edit1.Text)

попробуйте так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
 begin
 Edit2.Text:=IntToStr(Length(Trim(Edit1.Text)));
 end;


p.s. а ещё, никто не мешает Вам вывести в Edit2.text исходную строку, и ручками подсчитать в ней символы :
Код:
procedure TForm1.Button1Click(Sender: TObject);
 begin
   Edit2.Text:= 'Длина строки = '+IntToStr(Length(Edit1.Text))+' строка:'+Edit1.Text+'<<<<';
 end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2014, 00:26   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вот если бы автор вопроса сделал SizeOf(Edit1.Text), тогда да, размер одного символа в байтах имел бы значение.
Сильно сказано.
northener вне форума Ответить с цитированием
Старый 10.03.2014, 16:05   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если бы автор вопроса сделал SizeOf(Edit1.Text)
Да ну... Получил бы скорее всего 4, как размер указателя на свойство... Врядли SizeOf так сумел бы. А вот я за Length замечал казусы в строке с юникодом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа считающая количество символов в строке. gor_ais Общие вопросы Delphi 5 08.03.2014 18:48
Одинаковое количество символов в строке viks1 Общие вопросы Delphi 21 31.03.2013 22:49
Количество различных символов в строке Pasha_Sh Паскаль, Turbo Pascal, PascalABC.NET 2 25.10.2012 21:15
Количество символов в строке! kalosha-stepa Паскаль, Turbo Pascal, PascalABC.NET 7 24.09.2012 08:09
Количество символов в строке Ivan357 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2008 17:06