Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 059

/ вопрос открыт /

Здравствуйте, эксперты!
У меня задача: написать программу для удаления из строки слова с заданным номером. Ничего не получается. Не знаю даже с чего начать. Подскажите, пожалуйста!

papasik Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: papasik (статус: Посетитель)
Вопрос отправлен: 18 апреля 2010, 18:56
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ладно, пришлось включить телепатор и написать.

В прицепе - тестовая программа.
За хреновую формулировку задачи поставил минус.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Приложение:
  1. const
  2.  
  3.  
  4.  
  5. function GetWordCount(const S: string): Integer;
  6. var
  7. Index, Len: Integer;
  8. begin
  9. Result:= 0;
  10. Index:= 1;
  11. Len:= Length(S);
  12.  
  13. while Index <= Len do
  14. begin
  15.  
  16. if S[Index] in Letters
  17. then begin
  18.  
  19.  
  20. Inc(Index);
  21. end;
  22.  
  23. Inc(Index);
  24. end;
  25. end;
  26.  
  27.  
  28. function DeleteWordFromString(const S: string; const WordPos: Integer): string;
  29. var
  30. Index, Len, Count, Position, WordCount: Integer;
  31. begin
  32. Result:= S;
  33. Len:= Length(S);
  34. Index:= 1;
  35. Count:= 0;
  36. WordCount:= GetWordCount(S);
  37.  
  38. if WordCount = 0
  39. then Exit;
  40.  
  41. while Index <= Len do
  42. begin
  43.  
  44. if S[Index] in Letters
  45. then begin
  46.  
  47.  
  48.  
  49.  
  50. Inc(Index);
  51.  
  52.  
  53. if Count = WordPos
  54. then begin
  55. if (Count < WordCount) or (WordCount = 1)
  56. then Delete(Result, Position, Index - Position + 1)
  57. else Delete(Result, Position - 1, Index - Position + 1);
  58.  
  59. Break;
  60. end;
  61. end;
  62.  
  63. Inc(Index);
  64. end;
  65. end;


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 18 апреля 2010, 20:23


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 20 апреля 2010, 22:20; участников в обсуждении: 5.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2010, 19:00 [#1]:

Что есть в твоём представлении слово в строке?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
papasik

papasik (статус: Посетитель), 18 апреля 2010, 19:04 [#2]:

Набор символов разделённый каким-либо знаком препинания (пробел, точка и т.д.)
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2010, 19:25 [#3]:

А что делать с оставшимися от слова разделителями? Если из строки "11 22 33" удалить "22", то будет двойной пробел "11 33".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
papasik

papasik (статус: Посетитель), 18 апреля 2010, 19:37 [#4]:

Как я понимаю, нам нужно удалить количество символов, из которых состоит это слово, плюс один символ. Тогда у нас будет один разделитель между 11 и 33.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2010, 19:46 [#5]:

Цитата (papasik):

Как я понимаю, нам нужно удалить количество символов, из которых состоит это слово, плюс один символ.

Плюс один символ где? Слева или справа от удаляемого слова?
А если слово первое и/или последнее?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
papasik

papasik (статус: Посетитель), 18 апреля 2010, 19:53 [#6]:

Если слово первое, то сказанное мною выше подходит, а если последнее, то строку мы можем закончить "точкой" и тогда то, что я сказал выше, тоже подходит.
papasik

papasik (статус: Посетитель), 18 апреля 2010, 19:54 [#7]:

Плюс один символ справа от удаляемого слова.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2010, 19:56 [#8]:

Ну вот. А теперь сформулируй задание полностью, без разночтений, со всеми возможными "если".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
papasik

papasik (статус: Посетитель), 18 апреля 2010, 20:13 [#9]:

Сделать задачу нужно в оконном режиме. Мы вводим предложение, заканчивающееся "точкой", в поле Edit1. Затем в поле Edit2 вводим номер слова, которое нам надо удалить. При нажатии на кнопку Button1 программа должна удалить слово, с заданным нами номером, и вывести его в поле Edit3.
Zigzag

Zigzag (статус: Посетитель), 18 апреля 2010, 20:16 [#10]:

Проверь личку. То, что тебе надо или нет?
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2010, 20:20 [#11]:


Админу:
Андрюха, ну когда ж ты мне разрешишь тут материться, А?!!!



Цитата (papasik):

Сделать задачу нужно в оконном режиме. Мы вводим предложение, заканчивающееся "точкой", в поле Edit1. Затем в поле Edit2 вводим номер слова, которое нам надо удалить. При нажатии на кнопку Button1 программа должна удалить слово, с заданным нами номером, и вывести его в поле Edit3.


Мне по барабану, в каком режиме у тя программа будет, куда ты там чо будешь вводить и прочая лабуда. Мне нужна полная формулировака функции удаления N-го слова из строки, без разночтений, со всеми возможными "если".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
serox

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™

min@y™ (статус: Доктор наук), 20 апреля 2010, 08:20 [#13]:

Цитата (serox):

Объясните малограмотому, почему выползает данная ошибка в этой программе...

Это не ошибка, а предупреждение. Что-то не так в 52-й строке.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 20 апреля 2010, 10:49 [#14]:

Ошибка вылазит, потому что делфи 2010 использует юникод и конструкция x in [...] не работает для юникодных символов корректно. (то есть на самом деле работает, но ограничено).
Можно конечно написать так, что бы было "корректно и красиво", но...

то min@y™: Придираешься слишком к человеку. Сказано "удалить слово", то какие проблемы с пробелами, которые есть разделителями, не более?

Хотя, иногда, наловившись единиц, хочеться ....Но они не могут, они сами не понимают задания, так что обижаться на них не нужно.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 20 апреля 2010, 11:06 [#15]:

Цитата (Вадим К):

Придираешься слишком к человеку. Сказано "удалить слово", то какие проблемы с пробелами, которые есть разделителями, не более?

Пришлось придраться: я написал функцию, отдал, а потом бы он мне претензии стал предъявлять про оставшиеся разделители и мне пришлось бы переделывать. А так я просто уточнил детали и сделал, как надо.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
serox

serox (статус: Посетитель), 20 апреля 2010, 21:44 [#16]:

Вадим К: А как это исправить можно? У меня Делфи даже не считает из-за этого... пишет что одно слово в предложении... =/
That will be, you and do not learn, if never will try! ^__^
min@y™

min@y™ (статус: Доктор наук), 20 апреля 2010, 22:20 [#17]:

Цитата (serox):

А как это исправить можно? У меня Делфи даже не считает из-за этого... пишет что одно слово в предложении... =/

Тебе же компилятор пишет:

Цитата:


Consider using 'CharInSet' function in 'SysUtils' unit.

Вот и юзай её.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.02 сек.