Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2014, 12:32   #1
Ilai
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 90
Лампочка Строки

Добрый день!
Помогите пожалуйста написать программу: преобразовать строку, записав символы каждого слова этой строки в обратном порядке.. Пожалуйста, помогите, никогда не работал со строками, не получается написать программу. Вот, пробовал написать, но программа действует не всегда. К примеру на короткую строку "abc def" выводит "cba fed", а если ввести что то подлиннее, то программа не работает:

Код:
Program Stroki;
var
    str, temp: string;
    len, i, j, b, a: byte;
 
begin
    readln(str);
    len := length(str);
    a:=0;
    b:=1;
    for i:=1 to len do
    begin
        if str[i] = ' ' then
        begin
         for j:=b to a do
         temp[j]:=str[len-j-3];
         b:= a+2;
         a:=a+2;
           end
       else
            a:= a + 1;
          if i=len then
          for j:=b to a-1 do
         temp[j]:=str[len-j+5];
    end;
    for i:=1 to len do
    write(temp[i]);
    readln;
end.
Ilai вне форума Ответить с цитированием
Старый 06.12.2014, 12:55   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Откуда взялисъ 3 и 5,? 2-3
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.12.2014, 12:57   #3
Ilai
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 90
По умолчанию

Я пробовал для строки с количеством элементов 7. Поэтому использовал цифры. По другому не знаю как.
Ilai вне форума Ответить с цитированием
Старый 06.12.2014, 13:04   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Для перестановок, используются две возможности - инкремент и декремент. Чё-йт другого я не узрел. (старею, наверноее).
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.12.2014, 15:10   #5
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
temp, str : string;
len, i, j, flag: integer;
begin
str := Edit1.Text;
str:= str + ' ';//костыль
len := Length(str);
flag := 0; //конец прошлого слова
for i := 1 to len do
  begin
    if str[i] = ' ' then
      begin
        j:= 1;
        while flag <> (i - j) do
          begin
            temp := temp + str[i - j];
            j := j + 1;
          end;
        flag := i;
        temp := temp + ' ';
      end;
  end;
Edit2.Text:= temp;
end;
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Старый 06.12.2014, 15:37   #6
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Aleksander550 Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
temp, str : string;
len, i, j, flag: integer;
begin
str := Edit1.Text;
str:= str + ' ';//костыль
len := Length(str);
flag := 0; //конец прошлого слова
for i := 1 to len do
  begin
    if str[i] = ' ' then
      begin
        j:= 1;
        while flag <> (i - j) do
          begin
            temp := temp + str[i - j];
            j := j + 1;
          end;
        flag := i;
        temp := temp + ' ';
      end;
  end;
Edit2.Text:= temp;
end;

Код:
function _pRevers(const str: string): string;
var
i: integer;
tmp, tmp1: string;
begin
tmp:= ' '; //тоже костыль)))
  for i:=length(str) downto 0 do
    begin
    if (str[i] = ' ') or (i = 0) then
      begin
      tmp1:= tmp + tmp1;
      tmp:= '';
      end;
      tmp:= tmp + str[i];
    end;
    Result:= Trim(tmp1);
end;

var
str: string;
begin
    readln(str);
    write(_pRevers(str));
    writeln;
end.
Aleksander550, результат тримать нужно))) - в конце пробел добавляется.

Последний раз редактировалось Iron Monk; 06.12.2014 в 15:43.
Iron Monk вне форума Ответить с цитированием
Старый 06.12.2014, 16:07   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ilai
Упростим?
Код:
program Project1;
var s,r:string;
  i,j,k:integer;
begin
  s:='hello my world';
  s:=s+' ';
  r:=''; k:=1;
  for i:=1 to Length(s) do begin
   if s[i]=' ' then begin
     for j:=i-1 downto k do write(s[j]); write(' ');
     k:=i+1;
   end;
  end;
  readln;
end.
P.S. Смитт, с выходом
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2014, 16:21   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
P.S. Смитт, с выходом
Спасибо .
Будешь ржать. Забанили, думал поработаю спокойно. Ага! В больничку на 2 недели залетел...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 06.12.2014 в 16:27.
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.12.2014, 16:53   #9
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Упростим?
Код:
program Project1;
var s,r:string;
  i,j,k:integer;
begin
  s:='hello my world';
  s:=s+' ';
  r:=''; k:=1;
  for i:=1 to Length(s) do begin
   if s[i]=' ' then begin
     for j:=i-1 downto k do write(s[j]); write(' ');
     k:=i+1;
   end;
  end;
  readln;
end.
А зачем переменная "r" объявлена?
И к концу строки добавляется пробел...
Iron Monk вне форума Ответить с цитированием
Старый 06.12.2014, 17:01   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
А зачем переменная "r" объявлена?
И к концу строки добавляется пробел...
На счёт переменной r не знаю, а пробел необходим для разделения результатов рассчёта. Иначе всё в сплошняк сольётся.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Упорядочить строки матрицы D (m. n) Лексикографически по неубыванию первых k элементов строки Анатолий171 Помощь студентам 123 04.07.2014 18:46
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10