Помогите решить задачку на строки |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Помогите решить задачку на строки |
wary |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
Условие: Дана строка символов. Дано слово (например "окно"). Удалить из заданной изначально строки слово "окно"
Алгоритм решения, который я придумал: 1. Определяем как константу слово "окно" (slovo_okno) 2. Вводим произвольную строку (st1) 3. Курабасим в цикле строку (st1) и выявляем в ней слово "окно" 4. Удаляем выявленно слово "окно" 5. Выводим на экран то что осталось от строки (st1) Поскольку я новичок в паскале, немного трудновато с описание п.3 и п.4. Если не трудно подскажите код как их описать, а также замечания по алгоритму. Заранее всем спасибо! |
мисс_граффити |
Сообщение
#2
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
ну... при очень большом желании можно и так...
а вообще есть ф-ция Цитата Pos(SubS, s : string) : byte - Ищет вхождение подстроки SubS в s и возвращает номер первого символа SubS в s, или 0, если s не содержит SubS потом - процедура Цитата Delete(VAR s : String; start, len : Integer) - Удалает подстроку длиной len начиная с позиции start строки s Длину ты знаешь, положение тоже нашел. Вот и вся твоя задача -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
Сообщение
#3
|
Гость |
Цитата Длину ты знаешь, положение тоже нашел. Не забыть проверять только, что найденный кусок текста действительно является словом, а не его частью, ибо на этом ОЧЕНЬ просто погореть:"Я стоял перед окном" Pos найдет, Delete удалит без сомнения... Что получим? |
Bokul |
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
var s,word:string; b:boolean; buf:byte; Сообщение отредактировано: volvo - -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
Сообщение
#5
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Bokul, у меня под рукой нет компилятора, чтоб проверить, но в целом работать должно.
Замечания же такие: 1. Слова могут быть отделены не только пробелами, но и знаки препинания (,.!? ...), и в этом случае твоя прога потребует значительных изменений.. 2. Зачем тебе переменная b? Не проще ли просто заканчивать так: until buf=0; ? 3. Если уж у тебя есть булева переменная, то зачем устраивать ее сравнение? Иначе говоря, вместо until b=false; лучше писать так: until not b; Ну и последнее.. Тут явно напрашивается процедура вроде GetNextWord, которая искала бы следующее слово, начинаяя с заданной позиции, и выдавала бы его начальную позицию и длину. Затем ты мог бы проверить, совпадает ли оно с заданным. Такая процедурка могла бы тебе пригодится и в дальнейшем при лексическом анализе . -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
Сообщение
#6
|
Гость |
Bokul программка почему-то не работает....а обзывается инвалидом...
|
Lapp |
Сообщение
#7
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Bokul программка почему-то не работает....а обзывается инвалидом... Нельзя ли чуть подробнее? На каком этапе ошибка? и само сообщение поточнее. Я прогнал, вроде работает.. Смотри сам: ■ Free Pascal IDE Version 1.0.6 [2005/11/26] ■ Compiler Version 2.0.2 ■ GBD Version GDB 6.2.1 ■ Cygwin "C:\FPC\2.0.2\bin\i386-win32\cygwin1.dll" version 1005.12.0.0 Running "c:\home\home\ak\pas\th\th011\th011.exe " Enter string asdf ghjk zxcvb qwer tyui asdf wert Enter word asdf Result : ghjk zxcvb qwer tyui wert -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
Сообщение
#8
|
Гость |
Цитата(lapp @ 21.10.2006 12:43) Я прогнал, вроде работает.. Аналогично - в Turbo Pascal 7.0 и Virtual Pascal 2.1 ...Гость, какой у тебя компилятор? |
wary |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
Огромное всем спасибо, задача тщательно разобрана (с моей стороны с помощью ваших ответов) и решена
|
Текстовая версия | 29.03.2024 5:34 |