Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Tan'chik
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 77
1

удалить слова

06.09.2010, 21:32. Просмотров 634. Ответов 8
Метки нет (Все метки)

Из заданной строки удалить слова, содержащие четное количество гласных)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2010, 21:32
Ответы с готовыми решениями:

Удалить слова, которые содержат все буквы заданного слова, и продублировать остальные слова
Разделитель — один из символов « ,.;:!?"'» (начиная с пробела и заканчивая...

Нужно в строке удалить слова, состоящие из букв заданного слова
Задание такое: вводится слово и строка (отдельно). Нужно в строке удалить...

Удалить все слова, состоящие только из букв последнего слова
Помогите пожалуйста решить задачку: Дана строка символов. Разделителями слов...

Удалить из предложения все слова с нечетными номерами и переворачивая слова с четными номерами
вот решил одну из задач: Отредактировать заданное предложение, удаляя из него...

Удалить все слова с нечетными порядковыми номерами и перевернуть все слова с четными номерами.
Помогите пожалуйста! Дана строка символов. Будем рассматривать слова,...

8
o-user
245 / 202 / 26
Регистрация: 03.02.2009
Сообщений: 786
07.09.2010, 08:50 2
А что не получается?
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
07.09.2010, 09:37 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
program Project1;
 
(*Перевод букв в верхний регистр в DOS кодировке с поддержкой букв кириллицы.*)
function UpCaseRus(const aCh : Char) : Char;
begin
  case aCh of
    #$A0..#$AF : UpCaseRus := Chr( Ord(aCh) - 32 );
    #$E0..#$EF : UpCaseRus := Chr( Ord(aCh) - 80 );
    #$F1       : UpCaseRus := #$F0;
    else UpCaseRus := UpCase(aCh);
  end;
end;
 
const
  (*Множество разделителей слов.*)
  D = [' ', '.', ',', ':', ';', '!', '?', #9, #10, #13];
  (*Множество гласных букв.*)
  A = ['А', 'Е', 'И', 'О', 'У', 'Ы', 'Э', 'Ю', 'Я'];
var
  i, Cnt, Pos1, Pos2 : Integer;
  StrSrc, StrRes : ShortString;
begin
  repeat
    Writeln('Введите строку:');
    Readln(StrSrc);
 
    Pos1 := 0;
    Pos2 := 0;
    Cnt := 0;
    StrRes := '';
    for i := 1 to Length(StrSrc) do begin
      (*Если очередной символ является разделителем - добавляем его к результирующей строке.*)
      if StrSrc[i] in D then begin
        StrRes := StrRes + StrSrc[i];
        Continue;
      end;
      (*Отслеживаем начало слова.*)
      if i = 1 then
        Pos1 := i
      else if StrSrc[i - 1] in D then
        Pos1 := i
      ;
      (*Отслеживаем конец слова.*)
      if i = Length(StrSrc) then
        Pos2 := i
      else if StrSrc[i + 1] in D then
        Pos2 := i
      ;
      (*Подсчёт количества гласных букв.*)
      if UpCaseRus(StrSrc[i]) in A then
        Inc(Cnt)
      ;
      (*Если конец слова найден - обрабатываем его.*)
      if Pos2 > 0 then begin
        (*Если количество гласных букв нечётное - переписываем слово
        в результирующую строку.*)
        if (Cnt mod 2) <> 0 then
          StrRes := StrRes + Copy(StrSrc, Pos1, Pos2 - Pos1 + 1)
        ;
        (*Сброс счётчика гласных букв.*)
        Cnt := 0;
        (*Сбрасываем флаг-координату конца слова.*)
        Pos2 := 0;
      end;
    end;
 
    Writeln('Полученная строка:');
    Writeln(StrRes);
 
    Writeln('Повторить - Enter. Выход - лбой символ + Enter.');
    Readln(StrSrc);
  until StrSrc <> '';
end.
1
Puporev
Модератор
55012 / 42307 / 29213
Регистрация: 18.05.2008
Сообщений: 99,972
07.09.2010, 09:54 4
Mawrat, Вот скажи что не на Делфи писал?
нету у нас ShortString;
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
07.09.2010, 11:09 5
Цитата Сообщение от Puporev Посмотреть сообщение
Mawrat, Вот скажи что не на Делфи писал?
нету у нас ShortString;
Да - на Delphi в консоли писал. Когда выкладывал, забыл SortString на String поменять...
---
Вот ещё вариант - с проходом строки справа - налево и с использованием процедуры Delete():
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
program Project1;
 
(*Перевод букв в верхний регистр в DOS кодировке с поддержкой букв кириллицы.*)
function UpCaseRus(const aCh : Char) : Char;
begin
  case aCh of
    #$A0..#$AF : UpCaseRus := Chr( Ord(aCh) - 32 );
    #$E0..#$EF : UpCaseRus := Chr( Ord(aCh) - 80 );
    #$F1       : UpCaseRus := #$F0;
    else UpCaseRus := UpCase(aCh);
  end;
end;
 
const
  (*Множество разделителей слов.*)
  D = [' ', '.', ',', ':', ';', '!', '?', #9, #10, #13];
  (*Множество гласных букв.*)
  A = ['А', 'Е', 'И', 'О', 'У', 'Ы', 'Э', 'Ю', 'Я'];
var
  i, Cnt, Pos1, Pos2 : Integer;
  StrSrc : String;
begin
  repeat
    Writeln('Введите строку:');
    Readln(StrSrc);
 
    (*Движемся по строке справа - налево - т. е. от её конца - к началу.*)
    Pos1 := 0;
    Pos2 := 0;
    Cnt := 0;
    i := Length(StrSrc);
    while i >= 1 do begin
      (*Если очередной символ является разделителем - пропускаем его.*)
      if StrSrc[i] in D then begin
        Dec(i);
        Continue;
      end;
      (*Отслеживаем начало слова.*)
      if i = 1 then
        Pos1 := i
      else if StrSrc[i - 1] in D then
        Pos1 := i
      ;
      (*Отслеживаем конец слова.*)
      if i = Length(StrSrc) then
        Pos2 := i
      else if StrSrc[i + 1] in D then
        Pos2 := i
      ;
      (*Подсчёт количества гласных букв.*)
      if UpCaseRus(StrSrc[i]) in A then
        Inc(Cnt)
      ;
      (*Если начало слова найдено - обрабатываем его.*)
      if Pos1 > 0 then begin
        (*Если количество гласных букв чётное - удаляем слово.*)
        if (Cnt mod 2) = 0 then
          Delete(StrSrc, Pos1, Pos2 - Pos1 + 1)
        ;
        (*Сброс счётчика гласных букв.*)
        Cnt := 0;
        (*Сбрасываем флаг-координату начала слова.*)
        Pos1 := 0;
      end;
      (*Перемещаемся на один символ в сторону начала строки.*)
      Dec(i);
    end;
 
    Writeln('Полученная строка:');
    Writeln(StrSrc);
 
    Writeln('Повторить - Enter. Выход - лбой символ + Enter.');
    Readln(StrSrc);
  until StrSrc <> '';
end.
1
Tan'chik
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 77
07.09.2010, 23:29  [ТС] 6
Pascal
1
а как сделать, чтоб буквы были латинские. У меня не видно что удалилось
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
08.09.2010, 04:17 7
Чтобы алгоритм правильно работал с кириллицей и латиницей одновременно, надо переопределить множество "А" так:
Pascal
1
2
3
4
5
6
7
8
9
...
  (*Множество гласных букв.*)
  A = [
    (*Кириллица.*)
    'А', 'Е', 'И', 'О', 'У', 'Ы', 'Э', 'Ю', 'Я',
    (*Латиница.*)
    'A', 'E', 'I', 'O', 'U', 'Y'
  ];
...
1
Tan'chik
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 77
08.09.2010, 08:21  [ТС] 8
Pascal
1
2
3
4
5
6
7
а можно ли как то обойтись без1 это штуки:begin
  case aCh of
    #$A0..#$AF : UpCaseRus := Chr( Ord(aCh) - 32 );
    #$E0..#$EF : UpCaseRus := Chr( Ord(aCh) - 80 );
    #$F1       : UpCaseRus := #$F0;
    else UpCaseRus := UpCase(aCh);
  end;???
0
Puporev
Модератор
55012 / 42307 / 29213
Регистрация: 18.05.2008
Сообщений: 99,972
08.09.2010, 09:04 9
Tan'chik, Можно, просто в множествах написать и прописные и строчные буквы
Pascal
1
const glas=['A','a','E','e','O','o', и так далее, 12 латинских и 20 русских(2 бувы ёЁ)];
Добавлено через 1 минуту
Тогда считать гласные в слове
Pascal
1
2
3
k:=0;
for i:=1 to length(slovo) do
if slpvo[i] in glas then k:=k+1;
0
08.09.2010, 09:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2010, 09:04

Удалить из текста слова
помогите очень прошу. вот условие: Все слова в которых буква &quot;a&quot; встречается...

Удалить слова из строки
Написать программу, которая удаляет из заданной строки все слова длиной более...

Удалить из строки слова
Помогите, пожалуйста, решить: удалить из строки слова, в которых количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru