Главная страница
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 - уже говорит о том, что без дополнительных строковых(таки я уже уточняю как правильно должно звучать условие) переменных не обошлось...



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

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

Наверх




Память: 0.56 MB
Время: 0.011 c
15-1225349122
passlight
2008-10-30 09:45
2008.12.28
Следи за кредитом, будь осторожен...


1-1205087203
Toha
2008-03-09 21:26
2008.12.28
Проблема с качеством картинок.


15-1225259080
Slider007
2008-10-29 08:44
2008.12.28
С днем рождения ! 29 октября 2008 среда


2-1226565058
дед Маздай
2008-11-13 11:30
2008.12.28
Посылка строки из TThread в основной поток


15-1225530974
Riply
2008-11-01 12:16
2008.12.28
О пользе закрытия Handle`ов :)