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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2011, 18:14   #1
Lord_Rufus
Пользователь
 
Аватар для Lord_Rufus
 
Регистрация: 02.10.2008
Сообщений: 13
По умолчанию Как вывести символы из строки?

дана строка S:string

S:='123456'

как вывести первые два символа?
Lord_Rufus вне форума Ответить с цитированием
Старый 14.03.2011, 18:24   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Lord_Rufus, любой поисковик на запрос "delphi операции со строками" дает на первой же странице ответ.
Функция копирования части строки:

Код:
Copy(S: String; Index, Count: Integer): String
Возвращает подстроку строки S, начиная с номера символа, равного Index и содержащую до Count символов.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 14.03.2011, 19:18   #3
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Можно еще так:
Код:
label1.caption:='';
for i:=0 to 1 do
label1.caption:=label1.caption+s[i];
Вариантов куча. Можно через Copy, Delete, Insert, своими методами.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 14.03.2011, 20:38   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от MyLastHit Посмотреть сообщение
Можно еще так:
Код:
label1.caption:='';
for i:=0 to 1 do
label1.caption:=label1.caption+s[i];
твой способ неправильный
1. Поскольку есть специализированные методы для работы со строками, которые по производительности будут быстрее
2. Строка начинается с индекса 1
3. Даже если бы ты соблюдал пункт 2 при Length(s) = 0 у тебя будет ошибка доступа
Так что не "быдлокодь", потому что верный вариант уже написали
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 14.03.2011 в 20:41.
chertovich вне форума Ответить с цитированием
Старый 14.03.2011, 22:02   #5
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Чертович, я писал в забитом автобусе через моб. телефон) Пришел домой, увидел ошибку. Да признаю, что правильно будет вот так:
Код:
for i:=1 to 2 do
Тем не менее я не призывал автора тупо копипастить мой код. Вариант любой верный, я написал тот, которого еще не было.
Теперь я хочу услышать твои аргументы, почему Copy() производительнее цикла с двумя аргументами.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 15.03.2011, 08:41   #6
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Дело не в производительности. Дело в возможной ошибке доступа.
Как написал Чертович(извиняюсь за склонение имени), если в функции скормить пустую (s:=''; ) строку (либо запросить символы по номеру больше длины строки) - просто-напросто выскочит ошибка Access Volation с указанием области памяти... Потому что в таком случае s[1] будет иметь мусорный указатель, которого в области памяти программы скорее всего не будет. Для избежания этого придется делать лишние проверки валидности строки и номеров символов...
Это было "во-первых". А Во-вторых, автор не указывал, что ему необходимо самое высокое быстродействие.
В-третьих Copy() намного проще в реализации.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как удалить лишнеие символы в строке, и ограничить длину строки MixanMM Общие вопросы Delphi 3 11.06.2009 07:03
как из строки ТМемо удалить ненужные символы MixanMM Общие вопросы Delphi 3 10.06.2009 13:49
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Как вывести в цикле for ... do строки? ViTYAi2007 Помощь студентам 14 27.03.2008 05:47