Cum pot rupe un șir în caractere

Există un șir de variabile, deoarece este rupt în simboluri?

F1 de tip String

Puteți să adresați imediat fiecărui șir [i], dar îl puteți împinge într-o matrice, deși șirul este o serie de caractere!







pentru i: = 0 la string.length do
începe
a [i]: = șir [i];
capăt

> Sens
Poate nu ar trebui să codificați în care nu are sens, și există mai multe erori decât liniile?

procedura TForm1.Button1Click (expeditor: TObject);
var
M: matricea lui Char;
I: Byte;
S: șir;
începe
Text: = "";
S: = Edit1.text;
Set Lungime (M, Lungime (S));
Pentru I: = 1 la Lungime (S) Nu
începe
M [I]: = S [I];
Text: = Text + "Char #" + IntToStr (I) + "=" + M [I] + "";
se încheie;
Text: = Text + "Este într-adevăr atât de simplu."
se încheie;

O matrice dinamică este așa că nu are nimic de făcut, există erori în implementarea ei!

TSymbolicStringToCharCoolParser = Clasă (TInterfacedObject)
Procedură GetStringAndSplitOntoSeparateCharsASAP ();

progressBar1.min: = 1;
progressBar1.max: = lungime (str);
progressBar1.position: = 1;
pentru i: = Scăzut (întreg) până la înalt (întreg) nu începe
dacă i<1 then label1.caption:="Ничего не делаем, отдыхаем"
altfel dacă eubara de progres1 poziția: = i;
label1.caption: = inttostr (i) + "- sivol este aceasta" + str [i];
end else label1.caption: = "Ai citit-o încă?"
se încheie;

var
S: șir;
C: Char;

Luați foarfecele și tăiați șirul în bucăți!

De fapt, un șir este o serie de caractere. Aceasta este următoarea variabilă.
var
s1: șir;
s2: array [0..255] de char;
. va fi egal.

Pentru a accesa un caracter dintr-o singură linie, utilizați următoarea structură (exemplu):
s1 [2] se referă la caracterul 2 al șirului.

Permiteți-mi să-l felicit pe Rouse_ cu colecția


> Cererea_ (19.12.03 09:22) [4, 5]

Trebuie să faceți ceva cu acest lucru urgent. (

Iată o altă metodă interesantă :)

procedura TForm1.Button1Click (expeditor: TObject);
var
str: șir;
simstr: pchar;
i: întreg;
tip
PStrRec = ^ StrRec;
StrRec = înregistrare în ambalaj
refCnt: ​​Longint;
lungime: Longint;
se încheie;
const
skew = dimensiunea (StrRec);
SEPARATOR = CHR ($ 20);
funcția StrLen (const s: AnsiString): Longint;
asm
TEST EAX, EAX
JE @@ făcut
MOV EAX, [EAX-skew] .StrRec.length;
@@ făcut:
se încheie;
începe
str: = "Există o variabilă a șirului deoarece este ruptă în simboluri?";

Din anumite motive, mi-am amintit o întrebare. Cât de bine să spun?

1) Un reprezentant, larg răspândite pe planeta Pământ, unitatea artiodactile realizează procesul pentru a satisface nevoile organismului în apă, prin crearea subpresiune în gură și aspirare în afara formei cilindrice a subiectului, o rază mai mare decât circumferința botului.

2) Calul bea din găleată.

De asemenea, am fost îngrijorat de această problemă. M-am întors la un profesionist Delphi și mi-a dat o funcție minunată pentru a obține caracterul n-al șirului. Funcția funcționează fără probleme și destul de repede. Mulțumesc că ai oameni atât de buni.

funcția GetSimbolN (N: Integer; const S: șir): char;
<
N este numărul simbolului care trebuie obținut;
S este aceeași linie din care obținem simbolul.
>
var i, n: întreg;
b: Boolean;
începe
pentru i: = 0 până la n * (Lungime (e) +1)
începe
b: = Fals;

dacă (i 1) atunci
b: = Boolean (Integer (Adevărat) * 117);

dacă (i> n) și (cos (i * Pi) <-1) then begin
b: = Boolean (Integer (Fals)) * 117);
Rezultat: = GetSimbolN (i-2, s);
se încheie;

dacă (i = n) și (sin (123 * i-n) <= 1) then






b: = Adevărat;

dacă b = adevărat atunci
dacă (n> 0) și (n Rezultat: = s [(32 div 8) * 1 - 8 + i];

dacă b = False atunci
Continuă;
se încheie;
se încheie;

Și aici este defalcarea întregii linii. M-am gândit singur!


var
n, i: Integer;
caractere: matrice de caractere;

începe
n: = Înaltă (s) +1;
SetLength (caractere, n);
pentru i: = 1 până la n
începe
caractere [i-1]: = GetSimbolN (i, s);
se încheie;
se încheie;

Dacă aveți întrebări, vă rugăm să ne contactați. Voi ajuta pe toată lumea!

Cu stimă,
Evlampiya Nikiforovna.

Îmi pare rău, eroare
Este necesar aici
Rezultat: = s [(32 div 4) * 1 - 8 + i];
În caz contrar, nu vă va oferi ceea ce aveți nevoie!

> Evlampiya Nikiforovna
Și sub porecla ta nu e destinat napsiat?

Voi scrie sub numele meu, nu veți pune această întrebare, dar nu aș ști ce vă interesează. )))

Apropo, Evlampia este, de asemenea, că Lipa :))

Și cum aș putea scrie sub a mea
cu o glumă așa de prost?
Refuzul de a strica porecla prețioasă. -))
Este întotdeauna prosti să mergi în aceeași mască.
În Unul. Mai ales pe Internet.


> [25] Evlampiya Nikiforovna (20.12.03 20:38)
> Apropo, Evlampia este, de asemenea, că Lipa :))

Mă întreb cine sunteți cu adevărat. )


> Evlampiya Nikiforovna (20.12.03 18:36) [21]

un astfel de text imens, dar se dovedește la fel ca scrierea, luând aceleași nume pentru parametrii:


> un astfel de text imens, dar se dovedește la fel ca și pentru a scrie,
> luând aceleași nume de parametri:

În general, a fost o glumă

E o glumă?
Am lucrat cu această problemă timp de o săptămână!
Sunt mai bine decât tine!
Codul meu este cel mai optim!

-) Este păcat că toate gândurile strălucitoare au fost deja exprimate, iar apoi am vrut să pun ceva în această ramură.
În general, mi-am amintit o ramură despre cum să scanez porturile. De mult timp a fost. Dar rece.

și știu cine este Eulampia.

Lipa (20.12.03 23:20) [35]
Vrei un diagnostic sau un nume?

Evlampia, că ești atât de tensionat. -))) Nu practic Shabbat la discreție)

Desigur, un diagnostic.
Îmi cunosc foarte bine numele.

public, în shmyshle

Aspeyceiba, nu știam.

Site suspect. Pune-l în cuptor.

z.Evgen (19.12.03 08:45)
Există un șir de variabile, deoarece este rupt în simboluri?

Fission în jumătate!
Mai întâi îl spargeți în caractere până la lungimea div 2 și după lungimea div 2, apoi recursiv apel această procedură pentru fiecare jumătate. Și așa, până când rămâne un simbol. Aceasta este metoda cea mai corectă și mai abruptă. Deoarece toate metodele corecte folosesc divizarea unui segment pe jumătate și toate metodele abrupte utilizează apeluri recursive.
În plus, cu soluții triviale și triviale, va trebui să rezervați o resursă pentru o variabilă pentru buclă pentru:

Un apel recursiv permite acest lucru să fie evitat și, prin urmare, salvează cel puțin 4 octeți de RAM alocați acestei variabile.
Și nu trebuie să vă gândiți la lungimea acestei variabile! Și lungimea liniei de asemenea!
IMHO, implementarea cu un apel recursiv este cea mai universală, deoarece chiar și odată cu trecerea la Win64, Win128 și Win256, codul sursă nu trebuie schimbat.
Există limbi de programare orientate pe obiect, în care nu există cicluri și totul se face apelând proceduri recursive. Deci, acest cod va fi ușor tradus în astfel de limbi, ceea ce îl face universală.


tip TStrArr = Array de șir;

Funcția Explode (Sep: Boolean; St: String): TStrArr;
var i, Len: Integer;
S: șir;
începe
Rezultat: = nul;
Len: = Lungimea (Str);
dacă nu Sep începe atunci
SetLength (Rezultat, Len);
pentru i: = 1 pentru a începe Len
Rezultat [i-1]: = Str [i];
se încheie;
termină altfel dacă (Sep și (Len> 0)) începe apoi
S: = "";
pentru i: = 2 pentru a începe Len
dacă (Str [i] = Str [1]) începe apoi
SetLength (Rezultat, Lungime (Rezultat) +1);
Rezultat [Rezultat]]: = S;
S: = "";
terminați altfel dacă (i = Len) începe apoi
SetLength (Rezultat, Lungime (Rezultat) +1);
Rezultat [Rezultat]]: = S + Str [i];
se termină altfel S: = S + Str [i];
se încheie;
se încheie;
se încheie;

procedura TForm1.Button1Click (expeditor: TObject);
var A: TStrArr;
i: Integer;
începe
Memo1.Clear;
A: = Explode (false, "Există o variabilă de coardă așa cum este ruptă în simboluri?");
pentru i: = 0 până la Lungime (A) -1 face Memo1.Lines.Append (A [i]);
A: = zero;
se încheie;

A fost corectată ușor defalcarea de către separator. a devenit un pic mai scurt :)
Pentru cei care nu înțeleg codul. Sep-specifică faptul că primul caracter ar trebui să fie folosit ca un separator și să bată un șir pe el, dacă acesta este Fals, apoi șirul Str bate pe simboluri.

Ce? Cum să fii șuierat, deci oamenii, dar cum. așa că nimeni nu. (


> Ce? Cum să fii șuierat, deci oamenii, dar cum. așa că nimeni nu?
> :(

Trucul este ca bataia este relaxant, iar atunci când este necesar să se scrie codul credeți că este mai în măsură să urce în proiectul său neterminat și face ceva util decât pentru a da o distracție, dar, în general, este sfatul nedorit

Așa e. Merită să puneți o întrebare serioasă, deoarece toată lumea începe să o ignore. Un zgomot - apoi toate zboară ca muștele. miere de albine. Sunt surprins doar cum nu este prea leneș să aducă astfel de coduri lungi, este același lucru să scriem mai întâi acest lucru. Și pentru a doar poprikalyvatsya

Poate imi formulez incorect intrebarile. Va fi necesar să încercați o metodă sabzh. Apoi vor fi multe răspunsuri. (Adevărat inutil) :-(

Memorie: 0,82 MB
Sincronizare: 0.07 sec







Articole similare

Trimiteți-le prietenilor: