0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 16
1

Обработка строковых данных в Delphi. Поменять местами слова: первое со вторым, третье с четвёртым и т.д.

23.04.2012, 20:59. Показов 2025. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с задачей.
Дано:строка символов.Группы символов,разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя называют словами.Поменять местами слова:первое со вторым,третье с четвертым и т.д.
Для ввода строк использовать компонент RichEdit.
Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2012, 20:59
Ответы с готовыми решениями:

Поменять каждое первое слово местами с каждым вторым
Помогите написать программу. Вводим предложение и программа меняет первое слово со вторым третье...

Дана строка. Поменять местами первое слово со вторым, третье с четвертым и т.д.
всем ку. =) я еще плохо разбираюсь в строках.. помогите реализовать следуующее: вводим строку...

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

Поменять слова в строке: первое со вторым, второе с третьим, третье с четвертым
Сейчас программа выдает по такому принципу: Поменять слова в сообщении по принципу: первое с n/2+1...

4
13097 / 5878 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
23.04.2012, 22:20 2
Лучший ответ Сообщение было отмечено как решение

Решение

Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
const
  //Множество разделителей.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, Sw : String;
  i, Len, LenW, LenW1, CntW, P1, P2 : Integer;
begin
  S := RichEdit1.Text;
 
  Len := Length(S);
 
  CntW := 0; //Счётчик слов.
  LenW := 0; //Длина очередного слова.
  LenW1 := 0; //Длина нечётного слова.
  P1 := 0; //Позиция начала нечётного слова.
  for i := 1 to Len do begin
    //Пропускаем разделители.
    if S[i] in D then Continue;
    //Учитываем очередной знак в длине слова.
    Inc(LenW);
    //Отслеживаем конец слова.
    if (i = Len) or (S[i + 1] in D) then begin
      //Счётчик слов.
      Inc(CntW);
      //Если это чётное слово, то выполняем перестановку слов.
      if CntW mod 2 = 0 then begin
        P2 := i - LenW + 1; //Позиция начала чётного слова.
        Sw := Copy(S, P2, LenW); //Запоминаем чётное слово.
        Delete(S, P2, LenW); //Удаление чётного слова.
        Insert(Copy(S, P1, LenW1), S, P2); //На место чётного слова вставляем нечётное.
        Delete(S, P1, LenW1); //Удаление нечётного слова на его прежнем месте.
        Insert(Sw, S, P1); //На место нечётного слова вставляем чётное.
      //Если это нечётное слово, то запоминаем его координаты.
      end else begin
        P1 := i - LenW + 1;
        LenW1 := LenW;
      end;
      //Сброс длины очередного слова.
      LenW := 0;
    end;
  end;
 
  //Ответ.
  RichEdit2.Text := S;
end;
3
14 / 14 / 14
Регистрация: 09.12.2012
Сообщений: 56
25.12.2012, 23:10 3
Извините, а можно эту же задачу, только на языке паскаль?
0
13097 / 5878 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
26.12.2012, 10:22 4
В консольном приложении Delphi:
Delphi
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
const
  //Множество разделителей.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, Sw : String;
  i, Len, LenW, LenW1, CntW, P1, P2 : Integer;
begin
  //Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  //Если после переключения русские буквы показываются неверно,
  //следует открыть системное меню консольного окна - щелчком мыши в левом
  //верхнем углу окна консоли и выбрать:
  //Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Len := Length(S);
 
    CntW := 0; //Счётчик слов.
    LenW := 0; //Длина очередного слова.
    LenW1 := 0; //Длина нечётного слова.
    P1 := 0; //Позиция начала нечётного слова.
    for i := 1 to Len do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Учитываем очередной знак в длине слова.
      Inc(LenW);
      //Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then begin
        //Счётчик слов.
        Inc(CntW);
        //Если это чётное слово, то выполняем перестановку слов.
        if CntW mod 2 = 0 then begin
          P2 := i - LenW + 1; //Позиция начала чётного слова.
          Sw := Copy(S, P2, LenW); //Запоминаем чётное слово.
          Delete(S, P2, LenW); //Удаление чётного слова.
          Insert(Copy(S, P1, LenW1), S, P2); //На место чётного слова вставляем нечётное.
          Delete(S, P1, LenW1); //Удаление нечётного слова на его прежнем месте.
          Insert(Sw, S, P1); //На место нечётного слова вставляем чётное.
        //Если это нечётное слово, то запоминаем его координаты.
        end else begin
          P1 := i - LenW + 1;
          LenW1 := LenW;
        end;
        //Сброс длины очередного слова.
        LenW := 0;
      end;
    end;
 
    //Ответ.
    Writeln('Строка после обработки:');
    Writeln(S);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
В Pascal:
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
program Project1;
 
const
  //Множество разделителей.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, Sw : String;
  i, Len, LenW, LenW1, CntW, P1, P2 : Integer;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Len := Length(S);
 
    CntW := 0; //Счётчик слов.
    LenW := 0; //Длина очередного слова.
    LenW1 := 0; //Длина нечётного слова.
    P1 := 0; //Позиция начала нечётного слова.
    for i := 1 to Len do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Учитываем очередной знак в длине слова.
      Inc(LenW);
      //Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then begin
        //Счётчик слов.
        Inc(CntW);
        //Если это чётное слово, то выполняем перестановку слов.
        if CntW mod 2 = 0 then begin
          P2 := i - LenW + 1; //Позиция начала чётного слова.
          Sw := Copy(S, P2, LenW); //Запоминаем чётное слово.
          Delete(S, P2, LenW); //Удаление чётного слова.
          Insert(Copy(S, P1, LenW1), S, P2); //На место чётного слова вставляем нечётное.
          Delete(S, P1, LenW1); //Удаление нечётного слова на его прежнем месте.
          Insert(Sw, S, P1); //На место нечётного слова вставляем чётное.
        //Если это нечётное слово, то запоминаем его координаты.
        end else begin
          P1 := i - LenW + 1;
          LenW1 := LenW;
        end;
        //Сброс длины очередного слова.
        LenW := 0;
      end;
    end;
 
    //Ответ.
    Writeln('Строка после обработки:');
    Writeln(S);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
14 / 14 / 14
Регистрация: 09.12.2012
Сообщений: 56
27.12.2012, 20:23 5
Интересно, сильно усложниться программа, если менять слова через один, четные с четными, а нечетные с нечетными?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2012, 20:23
Помогаю со студенческими работами здесь

Обработка строковых данных. Поменять местами два слова (tasm)
Все слова в предложении имеют одинаковую длину. Заданы два целых положительных числа А и В. Это...

Поменять местами первое и второе слова,третье и четвертое и т.д.
дано предложение. Поменять местами первое и второе слова,третье и четвертое и т.д.Если количество...

Первый столбец матрицы поменять местами со вторым, третий - с четвёртым и т.д
В двухмерном массиве D первый столбец поменять местами со вторым, третий поменять местами с...

Поменять в матрице местами первый столбец со вторым, третий с четвёртым, и т. д.
помогите решить пожалуйста!!!! Дан двумерный массив из чётного числа столбцов .поменять местами...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru