Тема: Строка
Показать сообщение отдельно
Старый 06.11.2011, 17:41   #5 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

А чем вам не понравилось это решение? В нем используются строковые функции length(s) - определение длины строки, и s[i] - обращение к i-ому символу строки. Если i-тый символ строки равен одному из символов, принадлежащих указанному в условии множеству, то счетчик числа символов увеличивается на 1. Полный вариант решения следующий:
Код:
var i,n:integer;
s:string;
begin
writeln('Enter string');
readln(s);
n:=0;
for i:=1 to length(s) do
if (s[i] in ['*',':',';']) then inc(n);
writeln('Char *,:,; in string ', n);
readln
end.
Как гласит программистская мудрость, у каждой задачи есть минимум два решения, на мой взгляд, вышеприведенное является оптимальным. Но можно это дело представить и по-другому:
Код:
var i,n:integer;
s:string;
begin
writeln('Enter string');
readln(s);
n:=0;
for i:=1 to length(s) do
if (s[i]='*') or (s[i]=';') or (s[i]=':') then inc(n);
 writeln('Chars *:; in string ', n);
readln
end.
Как видите, разница не сильно большая, но в первом случае обращение к строке производится только 1 раз, а во втором случае - трижды считывается i-ый элемент, что немного замедляет выполнение программы. Первый вариант решения более гибкий, во множество легко добавить или из него удалить символы, которые нужно анализировать. Плюс во втором листинге использованы логические операторы, каждый из которых также замедляет программу. Ну и если нужно будет добавить новые символы для анализа, то условие будет слишком длинным, что просто неудобочитаемо и некрасиво

P.S. А что вы имеете в виду под:
Цитата:
Сообщение от Ильгиза Посмотреть сообщение
Со строкой надо работать как с единым объектом:
??? С точки зрения программирования, строка это своего рода массив символов, каждый из которых имеет свой порядковый номер. Строка уже по своему определению никак не может быть единым объектом. И еще, допустим, что есть возможность работать со строкой как с единым объектом, тогда возникает парадокс: разбивать строку на символы по условию мы не имеем права, а в задании нужно подсчитать количество именно символов, это взаимно исключающие действия. Как тогда, по вашему, должна решаться эта задача?
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070