Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.28;
Скачать: CL | DM;

Вниз

получить обратную строку   Найти похожие ветки 

 
Lincoln77   (2008-10-23 13:21) [0]

Как для строки без использования дополгительной переменной можно получить обратную строку. Т.е. "Test" получить "tseT";


 
Johnmen ©   (2008-10-23 13:22) [1]

Это лаба или диплом?


 
JustI   (2008-10-23 13:23) [2]


> Это лаба или диплом?

Лаба


 
Lincoln77   (2008-10-23 13:24) [3]

Лаба


 
Поросенок Винни-Пух ©   (2008-10-23 13:25) [4]

а ведь на дисер потянет


 
clickmaker ©   (2008-10-23 13:26) [5]

ReverseString() :)
в принципе, можно. Строка - массив символов, каждый имеет код.
Перестановка двух целых без третьего:
a := a xor b;
b := b xor a;
a := a xor b;


 
Johnmen ©   (2008-10-23 13:27) [6]


> Lincoln77   (23.10.08 13:24) [3]
> Лаба

Сколько?


 
Anatoly Podgoretsky ©   (2008-10-23 15:44) [7]

> Johnmen  (23.10.2008 13:27:06)  [6]

Он один!


 
Johnmen ©   (2008-10-23 15:47) [8]


> Anatoly Podgoretsky ©   (23.10.08 15:44) [7]
> Он один!

Зато партнёр!


 
Сергей М. ©   (2008-10-23 15:51) [9]


> Он один!


Если бы!
Совсем недавно, помнится, почти тот же по сути вопрос звучал здесь от еще одного..
остается только догадываться, что за ликбез клонирует лентяев-раздолбаев)


 
Azize ©   (2008-10-23 15:52) [10]

n:=length(s);
for i:=n downto 1 do
   s:=s+copy(s,1,k);
delete(s,4,1);

Помоему так. набирал тут проверить негде))


 
БарЛог ©   (2008-10-23 15:52) [11]

clickmaker ©   (23.10.08 13:26) [5]
> в принципе, можно. Строка - массив символов, каждый имеет код.
Ну так и прочитать ее наоборот :)


 
Azize ©   (2008-10-23 15:55) [12]


> n:=length(s);
> for i:=n downto 1 do
>    s:=s+copy(s,1,k);
> delete(s,4,1);

n:=length(s);
for i:=n downto 1 do
  s:=s+copy(s,1,n);
delete(s,n,1);


 
KSergey ©   (2008-10-23 15:57) [13]

> Azize ©   (23.10.08 15:52) [10]
> n:=length(s);
> for i:=n downto 1 do
>    s:=s+copy(s,1,k);
> delete(s,4,1);
> Помоему так. набирал тут проверить негде))


1) Что такое k?
2) А n и k - это уже не дополнительные переменные? :)


 
Сергей М. ©   (2008-10-23 15:59) [14]


> Azize


У тебя как минимум 2 доп.переменных)
Тебе не жаль студня ? Он же сдует этот код глазом не моргнув - и банан по лабе в кондуите ему обеспечен)


 
Azize ©   (2008-10-23 16:00) [15]


> У тебя как минимум 2 доп.переменных)
> Тебе не жаль студня ? Он же сдует этот код глазом не моргнув
> - и банан по лабе в кондуите ему обеспечен)

Насколько я понимаю нельзя использовать дополнительные строковые переменные.


 
Сергей М. ©   (2008-10-23 16:02) [16]


> Azize ©   (23.10.08 16:00) [15]


Банан от типа переменной не зависит)


 
Ega23 ©   (2008-10-23 16:22) [17]

Result дополнительной переменной является, или нет?


 
clickmaker ©   (2008-10-23 16:28) [18]

> Result дополнительной переменной является, или нет?

конечно )


 
БарЛог ©   (2008-10-23 16:41) [19]

можно выводить s[254], потом s[253]....s[1]
строка ведь по-любому не длиньш 255 символов :)


 
wl ©   (2008-10-23 16:58) [20]

Delphi syntax:

function ReverseString(const AText: string): string;

C++ syntax:

extern PACKAGE AnsiString __fastcall ReverseString(const AnsiString AText);

Description

ReverseString returns the string specified by AText with the characters in reverse order.


 
Dmitry S ©   (2008-10-23 17:01) [21]

 Insert("xxxx", S, 1);
 PInteger(@S[1])^ := 1;
 while (PInteger(@S[1])^ <= (Length(S) - 4) div 2) do
 begin
   byte(S[PInteger(@S[1])^ + 4]) :=             byte(S[PInteger(@S[1])^ + 4]) xor byte(S[Length(S) - PInteger(@S[1])^ + 1]);
   byte(S[Length(S) - PInteger(@S[1])^ + 1]) := byte(S[PInteger(@S[1])^ + 4]) xor byte(S[Length(S) - PInteger(@S[1])^ + 1]);
   byte(S[PInteger(@S[1])^ + 4]) :=             byte(S[PInteger(@S[1])^ + 4]) xor byte(S[Length(S) - PInteger(@S[1])^ + 1]);

   Inc(PInteger(@S[1])^);
 end;
 Delete(S, 1, 4);

Интересно сможет объяснить? :)


 
han_malign ©   (2008-10-23 17:03) [22]


> function ReverseString(const AText: string): string;

- это чтоб не на пару, а на твердый кол... :))


 
Azize ©   (2008-10-23 17:06) [23]


> Dmitry S ©   (23.10.08 17:01) [21]

А если строка произвольная?


 
Dmitry S ©   (2008-10-23 17:09) [24]


> А если строка произвольная?

А что тебя смущает?


 
han_malign ©   (2008-10-23 17:11) [25]


>  Insert("xxxx", S, 1);

- создается новая(дополнительная) строка...


 
Dmitry S ©   (2008-10-23 17:12) [26]


> - создается новая(дополнительная) строка...

Какая?


 
Azize ©   (2008-10-23 17:13) [27]


> А что тебя смущает?

Например то что данный пример расчитан на строку из четырёх символов


 
Dmitry S ©   (2008-10-23 17:14) [28]


> Например то что данный пример расчитан на строку из четырёх
> символов

Серьезно чтоли? :)


 
Azize ©   (2008-10-23 17:15) [29]


> Серьезно чтоли? :)

А что нет? Посмотри внимательнее


 
Dmitry S ©   (2008-10-23 17:17) [30]


> Azize ©   (23.10.08 17:15) [29]

Куда посмотреть-то? Я тебе говорю: нет:)


 
stas ©   (2008-10-23 17:18) [31]

Azize ©   (23.10.08 17:15) [29]
Ты хоть проверь для начала.


 
Azize ©   (2008-10-23 17:23) [32]


> Dmitry S ©   (23.10.08 17:17) [30]

Извини прогнал, смутило Delete(S, 1, 4); теперь допёр

> Ты хоть проверь для начала.

проверить не могу дельфи под рукой нет


 
han_malign ©   (2008-10-23 17:27) [33]


> Какая?

procedure       _LStrInsert{ const source : AnsiString; var s : AnsiString; index : Integer };
asm
....
{       set length of result to length(source) + length(s)      }
....
       CALL    _LStrSetLength
....

procedure       _LStrSetLength{ var str: AnsiString; newLength: Integer};
asm
....
@@copyString:
       MOV     EAX,EDX
       CALL    _NewAnsiString
....


 
Ega23 ©   (2008-10-23 17:54) [34]


> получить обратную строку


поставить к искомой зеркало, перпендикулярно монитору и читать с зеркала.
В условиях только про переменные сказано, про технические приспособления - ни слова.  :)


 
Dimka Maslov ©   (2008-10-23 18:10) [35]

SetLength(B, Length(A));
for i := 1 to Length(A) do A[i] := B[Length(A)-i+1];


 
Markus13 ©   (2008-10-23 18:19) [36]

во - нашел, когда-то я так это сделал:
function strInv(s:string):string;var k:word;begin
result:="";for k:=length(s)downto 1 do result:=result+s[k];end;

работает))


 
Dmitry S ©   (2008-10-23 18:31) [37]


> han_malign ©   (23.10.08 17:27) [33]

Ну и что? Данной функцией я меняю значение переменной, количество переменных от этого не меняется!


 
Ega23 ©   (2008-10-24 10:58) [38]


> Ну и что? Данной функцией я меняю значение переменной, количество
> переменных от этого не меняется!
>



   CALL    _NewAnsiString

Переменная-то новая - создалась...  :)


 
простой   (2008-10-24 14:11) [39]

Label1.Caption := ReverseString("Test");
Только в uses добавить StrUtils


 
han_malign ©   (2008-10-24 14:49) [40]


> Label1.Caption := ReverseString("Test");

1. было
2. наличие двух строк - "Test" и Label1.Caption - уже говорит о том, что без дополнительных строковых(таки я уже уточняю как правильно должно звучать условие) переменных не обошлось...


 
Dmitry S ©   (2008-10-24 15:22) [41]


>
>    CALL    _NewAnsiString
>
> Переменная-то новая - создалась...  :)

Переменная, возможно, стала занимать другой участок памяти - только всего.


 
@!!ex ©   (2008-10-24 15:37) [42]

> [41] Dmitry S ©   (24.10.08 15:22)

Старая не куда не делась.
Так что одновременно сущесвует две строки. Что не допустимо по условию.
Я бы через xor делал. Самое нормальное решение.


 
Dmitry S ©   (2008-10-24 16:12) [43]


> Старая не куда не делась.

т.е. ты хочешь сказать что процедура Insert содержит утечку памяти? :)


> Я бы через xor делал. Самое нормальное решение.

У тебя нет переменной для цикла ;)


 
@!!ex ©   (2008-10-24 20:02) [44]

> [43] Dmitry S ©   (24.10.08 16:12)
> У тебя нет переменной для цикла ;)

Конечно нет. а зачем?


 
@!!ex ©   (2008-10-24 20:04) [45]

> [44] @!!ex ©   (24.10.08 20:02)

Решение без лишних переменных можно придумать.
В тоже время не стоит утрировать, если мы работаем в жестко ограниченном пространстве памяти, то пережить 4 байта на переменную цикла вполне возможно, а вот пережить резервирование памяти равное строке(Ничего, что размер строки в дельфи может превышать гектар?) не всегда получится.


 
Дмитрий С   (2008-10-24 21:27) [46]

Улыбнуло :)


 
Ega23 ©   (2008-10-26 11:02) [47]


> Ничего, что размер строки в дельфи может превышать гектар?


Вроде, не больше четырёх.


 
GrayFace ©   (2008-10-26 23:50) [48]

не больше 2.



Страницы: 1 2 вся ветка

Текущий архив: 2008.12.28;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.013 c
2-1226918959
BiT
2008-11-17 13:49
2008.12.28
Подскажите, пожалуйста, как скопировать определенный текст в memo


3-1211873955
<bvv>
2008-05-27 11:39
2008.12.28
ORACLE доступ к "чужой" сессии


15-1225078325
Slider007
2008-10-27 06:32
2008.12.28
С днем рождения ! 26 октября 2008 воскресенье


15-1224866998
DVM
2008-10-24 20:49
2008.12.28
Подскажите чайнику в Java


4-1202738807
Unicode
2008-02-11 17:06
2008.12.28
TLogFontW и DrawTextW