IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> замена символа в строке на другой символ, замена символа в строке на другой символ
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


плиз, помогите решить, а то чет не получается dry.gif В строке символов надо везде, где встречается символ "пробел", заменить его на два "пробела"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Что не получается? Что пробовал, можно посмотреть? Вообще все должно получаться, если идти от хвоста строки в ее начало (и НЕ циклом for, естественно)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


А если встречается два пробела? Это будет отдельный символ "два пробела" или программа должна обработать каджый?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
В строке символов надо везде, где встречается символ "пробел", заменить его на два "пробела"
Значит, заменить на 4. Но я настоятельно рекомендую не приводить код до тех пор, пока ТС не покажет свои наработки...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 17.12.2009 16:43) *
идти от хвоста строки в ее начало (и НЕ циклом for, естественно)
А чем так плох for в данном случае? Я бы, думаю, именно с ним сделал..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Lapp @ 18.12.2009 3:58) *
А чем так плох for в данном случае? Я бы, думаю, именно с ним сделал..
Я тоже об этом подумал.
А еще о том, что не суть важно, перебирать от конца к началу или от начала к концу.
Но, несмотря на некоторую излишнюю категоричность утверждения, IMHO именно предложенный вариант самый простой в реализации.
В сообщениях volvo некедко явно либо неявно проскальзывает мысль, что предложенный им оптимальный вариант является единственно возможным. И, хотя формально это неверно, с дидактической точки зрения он, возможно, прав - нужно учить писать программы сразу оптимально.

PS. А еще неплохо было бы, если бы название темы соответствовало содержанию. Ну нет такого символа "два пробела".

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
А чем так плох for в данном случае? Я бы, думаю, именно с ним сделал..
А зачем тебе лишняя головная боль? Как ты собрался без этой самой головной боли заменить в строке (заметь, не переписать в другую строку, заменяя встреченный пробел на два, а именно заменить) один символ на два? Размер строки меняется, а For-у на это наплевать, он на каждой итерации условие окончания не вычисляет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(volvo @ 18.12.2009 10:38) *
Размер строки меняется, а For-у на это наплевать, он на каждой итерации условие окончания не вычисляет...
И что с того?
Все равно нам надо просмотреть именно ТО количество символов, которое было в первоначальной строке, а добавленные - не просмаривать.
Т.е. все условия цикла с наперед известным количеством повторений.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Да? Ну, попробуй:
s := 'вот  тебе  задачка    123';
Приведи решение с циклом For, я посмотрю, как, используя информацию об ИЗНАЧАЛЬНОЙ длине строки ты обработаешь последние пробелы... Никаких предварительных пробегов по строке, ибо While-вариант обойдется без этого...

Еще раз: НЕ записать в другую строку, а добавить в эту же, по условию...

Цитата
Все равно нам надо просмотреть именно ТО количество символов, которое было в первоначальной строке, а добавленные - не просмаривать.
Ты задание читал внимательно? Нам надо добавлять пробелы не в конец сроки, а в середину...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 18.12.2009 11:39) *
Ты задание читал внимательно? Нам надо добавлять пробелы не в конец сроки, а в середину...
volvo, я что-то совсем перестал тебя понимать.. Я так туплю?
Что тут плохого:
var
s: string;
i: integer;

begin
s := 'вот тебе задачка 123';
for i:=Length(s) downto 1 do if s[i]=' ' then begin
Delete(s,i,1);
Insert(' ',s,i)
end;
WriteLn(s);
ReadLn
end.
- ? blink.gif

Добавлено через 2 мин.
Delete я вставил для большей общности (типа замена на два других символа)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Я, кстати, вчера по другой задаче задумывался над этим: цикл for единожды берет начальный параметр или при каждой итерации и потом что-то прибавляет/вычитает? Видимо, единожды, т.к. вариант Lapp'а работает, а там в качестве задания начального значения параметру цикла используется меняющаяся длина строки..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Unconnected @ 18.12.2009 13:15) *
цикл for единожды берет начальный параметр или при каждой итерации и потом что-то прибавляет/вычитает? Видимо, единожды, т.к. вариант Lapp'а работает, а там в качестве задания начального значения параметру цикла используется меняющаяся длина строки..
В моем коде это прозрачно - первый параметр вроде как очевидно единожды. Второй - менее очевидно, и вопрос вполне законный. Ответ: да, единожды, в начале. Если переменная, использованная для второго предела изменяется во время исполнения, это никак не влияет на реальные пределы.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(volvo @ 18.12.2009 11:39) *
Еще раз: НЕ записать в другую строку, а добавить в эту же, по условию...

Ты задание читал внимательно? Нам надо добавлять пробелы не в конец сроки, а в середину...
Два вари анта на выбор:
  j := 1;
for i := 1 to length(s) do begin
if s[j] = ' ' then begin
insert(' ',s,j);
inc(j);
end;
inc(j);
end;

for i := length(s) downto 1 do
if s[i] = ' ' then
insert(' ',s,j);

Правка: исправлена опечатка.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(andriano @ 18.12.2009 14:17) *

Два вари анта на выбор:
  j := 1;
for i := 1 to length(s) do begin
if s[i] = ' ' then begin
insert(' ',s,j);
inc(j);
end;
inc(j);
end;

for i := length(s) downto 1 do
if s[i] = ' ' then
insert(' ',s,j);



Боюсь, первый вариант пролетает...
вот т е бе зад а ч к а 1 23
Впрочем, как и второй..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(volvo @ 17.12.2009 16:43) *

Что не получается? Что пробовал, можно посмотреть? Вообще все должно получаться, если идти от хвоста строки в ее начало (и НЕ циклом for, естественно)


s,s1:string;
s1:='';
s:='blablabla--текст';
i:integer;
for i:=0 to length(s) do
if s[i]=' ' then
s1:=s1+' ' else s1:=s1+s[i];

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Lapp @ 18.12.2009 14:45) *

Боюсь, первый вариант пролетает...
вот т е бе зад а ч к а 1 23
Впрочем, как и второй..

Да, в первом Варианте опечатка. А насчет второго - не понимаю.
Специально поставил на комп компилятор паскаля.
Полностью программа:
var
s : string;
i,j : longint;
begin
s := 'вот т е бе зад а ч к а 1 23';
writeln('<',s,'>');
j := 1;
for i := 1 to length(s) do begin
if s[j] = ' ' then begin
insert(' ',s,j);
inc(j);
end;
inc(j);
end;
writeln('<',s,'>');
s := 'вот т е бе зад а ч к а 1 23';
writeln('<',s,'>');

for i := length(s) downto 1 do
if s[i] = ' ' then
insert(' ',s,i);
writeln('<',s,'>');
end.

Результат работы:
Код
<вот т е бе зад а ч к а 1 23>
<вот  т  е  бе  зад  а  ч  к  а  1  23>
<вот т е бе зад а ч к а 1 23>
<вот  т  е  бе  зад  а  ч  к  а  1  23>


Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(andriano @ 18.12.2009 20:40) *
Да, в первом Варианте опечатка. А насчет второго - не понимаю.
Ну и во втором тоже опечатка.. Только она почему-то не попала в твой код.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.11.2020 2:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name