|
Вопрос # 4 059/ вопрос открыт / |
|
Здравствуйте, эксперты!
У меня задача: написать программу для удаления из строки слова с заданным номером. Ничего не получается. Не знаю даже с чего начать. Подскажите, пожалуйста!
 |
Вопрос задал: papasik (статус: Посетитель)
Вопрос отправлен: 18 апреля 2010, 18:56
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Ладно, пришлось включить телепатор и написать.
В прицепе - тестовая программа.
За хреновую формулировку задачи поставил минус. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
Приложение: Переключить в обычный режим- const
-
-
-
- function GetWordCount(const S: string): Integer;
- var
- Index, Len: Integer;
- begin
- Result:= 0;
- Index:= 1;
- Len:= Length(S);
-
- while Index <= Len do
- begin
-
- if S[Index] in Letters
- then begin
-
-
- Inc(Index);
- end;
-
- Inc(Index);
- end;
- end;
-
-
- function DeleteWordFromString(const S: string; const WordPos: Integer): string;
- var
- Index, Len, Count, Position, WordCount: Integer;
- begin
- Result:= S;
- Len:= Length(S);
- Index:= 1;
- Count:= 0;
- WordCount:= GetWordCount(S);
-
- if WordCount = 0
- then Exit;
-
- while Index <= Len do
- begin
-
- if S[Index] in Letters
- then begin
-
-
-
-
- Inc(Index);
-
-
- if Count = WordPos
- then begin
- if (Count < WordCount) or (WordCount = 1)
- then Delete(Result, Position, Index - Position + 1)
- else Delete(Result, Position - 1, Index - Position + 1);
-
- Break;
- end;
- end;
-
- Inc(Index);
- end;
- end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 18 апреля 2010, 20:23
|
Мини-форум вопроса
Всего сообщений: 17; последнее сообщение — 20 апреля 2010, 22:20; участников в обсуждении: 5.
|
min@y™ (статус: Доктор наук), 18 апреля 2010, 19:00 [#1]:
Что есть в твоём представлении слово в строке?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
papasik (статус: Посетитель), 18 апреля 2010, 19:04 [#2]:
Набор символов разделённый каким-либо знаком препинания (пробел, точка и т.д.)
|
|
min@y™ (статус: Доктор наук), 18 апреля 2010, 19:25 [#3]:
А что делать с оставшимися от слова разделителями? Если из строки "11 22 33" удалить "22", то будет двойной пробел "11 33".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
papasik (статус: Посетитель), 18 апреля 2010, 19:37 [#4]:
Как я понимаю, нам нужно удалить количество символов, из которых состоит это слово, плюс один символ. Тогда у нас будет один разделитель между 11 и 33.
|
|
min@y™ (статус: Доктор наук), 18 апреля 2010, 19:46 [#5]:
Цитата (papasik):
Как я понимаю, нам нужно удалить количество символов, из которых состоит это слово, плюс один символ.
Плюс один символ где? Слева или справа от удаляемого слова?
А если слово первое и/или последнее?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
papasik (статус: Посетитель), 18 апреля 2010, 19:53 [#6]:
Если слово первое, то сказанное мною выше подходит, а если последнее, то строку мы можем закончить "точкой" и тогда то, что я сказал выше, тоже подходит.
|
|
papasik (статус: Посетитель), 18 апреля 2010, 19:54 [#7]:
Плюс один символ справа от удаляемого слова.
|
|
min@y™ (статус: Доктор наук), 18 апреля 2010, 19:56 [#8]:
Ну вот. А теперь сформулируй задание полностью, без разночтений, со всеми возможными "если".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
papasik (статус: Посетитель), 18 апреля 2010, 20:13 [#9]:
Сделать задачу нужно в оконном режиме. Мы вводим предложение, заканчивающееся "точкой", в поле Edit1. Затем в поле Edit2 вводим номер слова, которое нам надо удалить. При нажатии на кнопку Button1 программа должна удалить слово, с заданным нами номером, и вывести его в поле Edit3.
|
|
Zigzag (статус: Посетитель), 18 апреля 2010, 20:16 [#10]:
Проверь личку. То, что тебе надо или нет?
|
|
min@y™ (статус: Доктор наук), 18 апреля 2010, 20:20 [#11]:
Админу:
Андрюха, ну когда ж ты мне разрешишь тут материться, А?!!!
Цитата (papasik):
Сделать задачу нужно в оконном режиме. Мы вводим предложение, заканчивающееся "точкой", в поле Edit1. Затем в поле Edit2 вводим номер слова, которое нам надо удалить. При нажатии на кнопку Button1 программа должна удалить слово, с заданным нами номером, и вывести его в поле Edit3.
Мне по барабану, в каком режиме у тя программа будет, куда ты там чо будешь вводить и прочая лабуда. Мне нужна полная формулировака функции удаления N-го слова из строки, без разночтений, со всеми возможными "если".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
serox (статус: Посетитель), 19 апреля 2010, 23:14 [#12]:
[DCC Warning] p4059.dpr(52): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet'
function in 'SysUtils' unit.
Объясните малограмотому, почему выползает данная ошибка в этой программе... Стоит Delphi 2010...
That will be, you and do not learn, if never will try! ^__^
|
|
min@y™ (статус: Доктор наук), 20 апреля 2010, 08:20 [#13]:
Цитата (serox):
Объясните малограмотому, почему выползает данная ошибка в этой программе...
Это не ошибка, а предупреждение. Что-то не так в 52-й строке.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 20 апреля 2010, 10:49 [#14]:
Ошибка вылазит, потому что делфи 2010 использует юникод и конструкция x in [...] не работает для юникодных символов корректно. (то есть на самом деле работает, но ограничено).
Можно конечно написать так, что бы было "корректно и красиво", но...
то min@y™: Придираешься слишком к человеку. Сказано "удалить слово", то какие проблемы с пробелами, которые есть разделителями, не более?
Хотя, иногда, наловившись единиц, хочеться ....Но они не могут, они сами не понимают задания, так что обижаться на них не нужно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 20 апреля 2010, 11:06 [#15]:
Цитата (Вадим К):
Придираешься слишком к человеку. Сказано "удалить слово", то какие проблемы с пробелами, которые есть разделителями, не более?
Пришлось придраться: я написал функцию, отдал, а потом бы он мне претензии стал предъявлять про оставшиеся разделители и мне пришлось бы переделывать. А так я просто уточнил детали и сделал, как надо.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
serox (статус: Посетитель), 20 апреля 2010, 21:44 [#16]:
Вадим К: А как это исправить можно? У меня Делфи даже не считает из-за этого... пишет что одно слово в предложении... =/
That will be, you and do not learn, if never will try! ^__^
|
|
min@y™ (статус: Доктор наук), 20 апреля 2010, 22:20 [#17]:
Цитата (serox):
А как это исправить можно? У меня Делфи даже не считает из-за этого... пишет что одно слово в предложении... =/
Тебе же компилятор пишет:
Цитата:
Consider using 'CharInSet' function in 'SysUtils' unit.
Вот и юзай её.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|