Як можна розбити рядок на символи

Є змінна String як її розбити на символи?

F1 по String types

Можеш відразу обращатсья до кожного сиволов string [i], а можеш затосовать в масив, хоча рядок - це і є масив символів!

for i: = 0 to string.length do
Begin
a [i]: = string [i];
End

> Sens
Може, не варто наводити код, в якому і сенсу немає, і помилок більше, ніж рядків?

procedure TForm1.Button1Click (Sender: TObject);
var
M: array of Char;
I: Byte;
S: String;
begin
Text: = "";
S: = Edit1.text;
SetLength (M, Length (S));
For I: = 1 To Length (S) Do
begin
M [I]: = S [I];
Text: = Text + "Char #" + IntToStr (I) + "=" + M [I] + "";
end;
Text: = Text + "Невже все так просто."
end;

Динамічний масив це так знічев'я, в його реалізації є помилки!

TSymbolicStringToCharCoolParser = Class (TInterfacedObject)
Procedure GetStringAndSplitOntoSeparateCharsASAP ();

progressBar1.min: = 1;
progressBar1.max: = length (str);
progressBar1.position: = 1;
for i: = Low (integer) to high (integer) do begin
if i<1 then label1.caption:="Ничего не делаем, отдыхаем"
else if iprogressbar1.position: = i;
label1.caption: = inttostr (i) + "- й сиволов - це" + str [i];
end else label1.caption: = "Встигли прочитати?"
end;

var
S: String;
C: Char;

Візьміть ножиці і разрешьте на шматки цей стринг!

Взагалі-то рядок - це масив символів. Тобто такі змінні.
var
s1: string;
s2: array [0..255] of char;
. дорівнюватимуть.

Щоб звернутися до окремого символу рядка використовуй наступну структуру (приклад):
s1 [2] - звернення до 2 символу рядка.

Дозвольте привітати Rouse_ c поповненням колекції


> Спрашівающій_ (19.12.03 9:22) [4, 5]

Вам з цим треба терміново щось робити. (

Ось ще класний метод :)

procedure TForm1.Button1Click (Sender: TObject);
var
str: string;
symstr: pchar;
i: integer;
type
PStrRec = ^ StrRec;
StrRec = packed record
refCnt: ​​Longint;
length: Longint;
end;
const
skew = sizeof (StrRec);
SEPARATOR = CHR ($ 20);
function StrLen (const s: AnsiString): Longint;
asm
TEST EAX, EAX
JE @@ done
MOV EAX, [EAX-skew] .StrRec.length;
@@ done:
end;
begin
str: = "Є змінна String як її розбити на символи?";

Чомусь згадався один питання. Як краще сказати?

1) Представник, поширеного на планеті Земля, загону парнокопитних здійснює процес задоволення потреби свого організму у воді, шляхом створення розрядження в порожнині рота і всмоктування її з предмета циліндричної форми, радіусом більшим, ніж окружність морди.

2) Кінь п'є з відра.

Мене теж хвилювала ця проблема. Я звернулася до одного професіоналу Delphi, і він мені дав чудову функцію отримання n-го символу рядка. Функція працює бездоганно і досить швидко. Спасибі, що є такі хороші люди.

function GetSimbolN (N: Integer; const S: string): char;
<
N - номер того самого символу, який необхідно отримати;
S - та сама рядок з якої отримуємо символ.
>
var i, n: integer;
b: Boolean;
begin
for i: = 0 to n * (Length (s) +1) do
begin
b: = False;

if (i 1) then
b: = Boolean (Integer (True) * 117);

if (i> n) and (cos (i * Pi) <-1) then begin
b: = Boolean (Integer (False) * 117);
Result: = GetSimbolN (i-2, s);
end;

if (i = n) and (sin (123 * i-n) <= 1) then
b: = True;

if b = true then
if (n> 0) and (n Result: = s [(32 div 8) * 1 - 8 + i];

if b = False then
Continue;
end;
end;

А ось і розбивка всього рядка. Я сама додумалася!


var
n, i: Integer;
chars: array of char;

begin
n: = High (s) +1;
SetLength (chars, n);
for i: = 1 to n do
begin
chars [i-1]: = GetSimbolN (i, s);
end;
end;

Якщо будуть питання, звертайтеся. Допоможу усім!

З повагою,
Євлампія Никифорівна.

Перепрошую, помилка
Треба ось це
Result: = s [(32 div 4) * 1 - 8 + i];
Інакше дасть не те, що треба!

> Євлампія Никифорівна
А під своїм ніком не судилося напсіать?

Напиши я під своїм ніком, Ви б не поставили це питання, а я б не впізнала, що Вас хвилює. )))

До речі, Євлампія - це те саме, що Липа :))

Та й як я могла написати під своїм
ім'ям настільки тупий жарт?
Не хочеться псувати дорогоцінний нік. -))
Нерозумно завжди ходити в одній масці.
У Єдиною. Тим більше в інтернеті.


> [25] Євлампія Никифорівна (20.12.03 20:38)
> До речі, Євлампія - це те саме, що Липа :))

Цікаво, хто ж ви насправді. )


> Євлампія Никифорівна (20.12.03 18:36) [21]

такий величезний текст, а виходить той же що написати, взявши ті ж назви параметрів:


> Такий величезний текст, а виходить той же що написати,
> Взявши ті ж назви параметрів:

В загально то це був прикол

Це що, жарт?
Я, тиждень працювала з цією проблемою!
Я, краще Вас розбираюся!
Мій код самий, оптимальний!

-) Шкода що всі геніальні думки вже були висловлені, а то так хотілося самому щось "всунути" в цю гілку.
А взагалі мені згадалася гілка про те як просканувати порти. Давно це було. Але прикольно.

а я знаю, хто така Євлампія.

Липа (20.12.03 23:20) [35]
Діагноз або ім'я хочеш?

Євлампія, що Ви так напружилися-то. -))) Я в шаббат разобл # чений не практикується)

Звичайно, діагноз.
Своє ім'я я сама непогано знаю.

publicних, в шмишле

Аспейсіба, я не знав.

Підозрілий сайтик. Помістіть егой в топку.

z.Evgen (19.12.03 08:45)
Є змінна String як її розбити на символи?

Розподілом навпіл!
Спочатку розбивши на символи до length div 2 і після length div 2, потім рекурсивно викликаєш цю процедуру для кожної половини. І так, поки не залишиться один символ. Це найправильніший і крутий метод. Так як всі правильні методи використовують поділ відрізка навпіл, а все круті методи використовують рекурсивні виклики.
До того ж при вульгарних і тривіальних рішеннях тобі довелося б резервувати ресурс під змінну для циклу for:

Рекурсивний виклик дозволяє цього уникнути і тому економить мінімум 4 байта оперативної пам'яті, що відводиться під цю змінну.
І тобі не доведеться думати про довжину цієї змінної! І довжині рядка теж!
ІМХО, реалізація з рекурсивним викликом сама універсальна, так як навіть з переходом на платформи Win64, Win128 і Win256 вихідний код не доведеться міняти.
Існують об'єктно-орієнтовані мови програмування, в яких взагалі немає циклів і все робиться викликом рекурсивних процедур. Так що цей код ще легко буде переводити на такі мови, що робить його універсальним.


type TStrArr = Array of String;

function Explode (Sep: Boolean; Str: String): TStrArr;
var i, Len: Integer;
S: String;
begin
Result: = nil;
Len: = Length (Str);
if not Sep then begin
SetLength (Result, Len);
for i: = 1 to Len do begin
Result [i-1]: = Str [i];
end;
end else if (Sep and (Len> 0)) then begin
S: = "";
for i: = 2 to Len do begin
if (Str [i] = Str [1]) then begin
SetLength (Result, Length (Result) +1);
Result [High (Result)]: = S;
S: = "";
end else if (i = Len) then begin
SetLength (Result, Length (Result) +1);
Result [High (Result)]: = S + Str [i];
end else S: ​​= S + Str [i];
end;
end;
end;

procedure TForm1.Button1Click (Sender: TObject);
var A: TStrArr;
i: Integer;
begin
Memo1.Clear;
A: = Explode (false, "Є змінна String як її розбити на символи?");
for i: = 0 to Length (A) -1 do Memo1.Lines.Append (A [i]);
A: = nil;
end;

Трохи підправив розбивку по сепаратора. стало трохи коротше :)
Для тих хто не зрозумів коду. Sep-вказує, що перший символ використовувати як роздільник і бити рядок по ньому, якщо він False, то рядок Str б'ється на символи.

Що? Як погомоніти, так народу купа, а як. так нікого. (


> Що? Як погомоніти, так народу купа, а як. так нікого?
> :(

Фішка в тому що трепка розслабляє, а коли треба писати код думаєш може краще полізти в свій незакінчений проект і зробити там що-небудь корисне ніж давати прикольні, але в загальному то непотрібні поради

Ось ось. Варто задати серйозне питання як всі починають його ігнорувати. А погомоніти - то все злітаються як мухи на. мед. Дивуюся тільки як це всім не лінь приводити такі довгі коди, це ж написати таке потрібно спочатку. Причому з метою просто поприколюватися

Може я свої питання неправильно формулюю. Потрібно буде спробувати методом сабжа. Тоді і відповідей купа буде. (Правда непотрібних) :-(

Пам'ять: 0.82 MB
Час: 0.07 c

Схожі статті