Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Bringoff
СуперМодулятор
133 / 132 / 48
Регистрация: 03.11.2012
Сообщений: 974
#1

Заменить строку на массив символов

17.01.2013, 23:45. Просмотров 686. Ответов 4
Метки нет (Все метки)

Заданные две строки текста одинаковой длины, состоящие из маленьких и больших букв латинского алфавита. Нужно проверить образовано ли вторую строчку путем циклического сдвига первой строки. Если это так, то вывести минимально возможный размер сдвига или -1 в противном случае.* Циклически сдвинуть строку на одну букву справа означает переместить позицию каждой буквы этой строки, кроме последней справа, а значение последней буквы поместить на начало слова. (Если слово «aaabb» сдвинуть на 1 позицию вправо, то получим «baaab»). Аналогичным образом, но в обратную сторону выполняется циклический сдвиг строки слева. (Смещение слова «ebcdaaa» на 2 позиции влево даст «cdaaaeb»).Входные данные: На вход подается два текстовых строки одинаковой длины. Длина строки не превышает 1000 символов.Исходные данные: Необходимо вывести длину минимального сдвига, или число -1, если вторая строка не цикличен смещением первой строки
Примеры
abcde deabc -> 2
aaab aaab -> 0
aab abc-> -1
У меня не проходит 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
var
  a, b, temp: string;
  ch: char;
  i, right, left, result: integer;
 
begin
  Readln(a);Readln(b);
  if a = b then 
  begin
    Write(0); halt;
  end;
  temp := a;
  for i := 1 to length(a) do
  begin
    if a = b then begin a := temp; break; end;
    ch := a[1];
    delete(a, 1, 1);
    a := a + ch;
    inc(left);
  end;
  for i := 1 to length(a) do
  begin
    if a = b then begin a := temp; break; end;
    ch := a[length(a)];
    delete(a, length(a), 1);
    a := ch + a;
    inc(right);
  end;
  if left > right then result := right else
    result := left;
  if (left = length(a)) or (right = length(a)) then 
    result := -1;
  Write(result); 
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 23:45
Ответы с готовыми решениями:

Создайте из четных символов строки st1 строку str2 и из нечетных символов строку str3
Помогите пожалуйста))

Разобрать строку символов на массив слов
разобрать строку символов на массив слов(255 символов и 128 слов)

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

Выведите на экран в одну строку набор символов в порядке расположения символов
Выведите на экран в одну строку набор символов «ABBCCC...ZZ...Z.» в порядке расположения символов в...

Заменить все вхождения строки s2 в исходную строку s1 на строку s3
даны три символьных строки s1 s2 s3. заменить все вхождения строки s2 в исходную строку s1 на...

4
orange_rush
140 / 146 / 116
Регистрация: 15.11.2012
Сообщений: 529
Записей в блоге: 2
19.01.2013, 12:31 #2
незнаю, у меня работает хорошо, всё правильно
0
Bringoff
СуперМодулятор
133 / 132 / 48
Регистрация: 03.11.2012
Сообщений: 974
19.01.2013, 15:40  [ТС] #3
Где работает? У меня ограничение в 1000 символов. На 200 все тоже работает.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25959 / 17406 / 6903
Регистрация: 22.10.2011
Сообщений: 30,644
Записей в блоге: 6
19.01.2013, 18:19 #4
Izobara, строки читаются из файла при прохождении тестов?

Тогда замени string на AnsiString, эта строка не имеет ограничения в 255 символов. Или добавь первой строкой {$H+}, что заставит компилятор FPC трактовать string как AnsiString, и результат будет тот же, что и в первом случае...
1
Bringoff
СуперМодулятор
133 / 132 / 48
Регистрация: 03.11.2012
Сообщений: 974
19.01.2013, 18:22  [ТС] #5
Цитата Сообщение от UI Посмотреть сообщение
Izobara, строки читаются из файла при прохождении тестов?

Тогда замени string на AnsiString, эта строка не имеет ограничения в 255 символов. Или добавь первой строкой {$H+}, что заставит компилятор FPC трактовать string как AnsiString, и результат будет тот же, что и в первом случае...
Спасибо! Заработало.
Я почему-то всегда думал, что AnsiString только в Delphi появился. Буду теперь знать.
0
19.01.2013, 18:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 18:22

ввести строку длиной 70 символов, а в другую строку перенести все слова из этой строки, которые имеют удвоение букв.
помогите сделать .!!!!! нужно ввести строку длиной 70 символов, а в другую строку перенести все...

Получить из этих строк новую строку, объединив N1 первых символов строки S1 и N2 последних символов строки S2.
1. Даны два числа: N1 и N2, и две строки: S1 и S2. Получить из этих строк новую строку, объединив...

Найти порядковый номер максимального элемента и записать его в первую строку файла, во 2-ю строку сам массив
var f, r: file of char; c: char; i, n,k: integer; max:char; x: array of char; ...


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

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

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