CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [Łańcuchy znaków] Funkcja odwrotna do .Pos? (char APos(int))
Strona 1 z 1

[Łańcuchy znaków] Funkcja odwrotna do .Pos? (char APos(int))

Nowy postNapisane: wtorek, 12 kwietnia 2011, 14:17
przez samurai-jerry
Witam,

Próbuję w pętli for przeanalizować każdy znak z łańcucha znaków typu String.
Spotkałem się już niejednokrotnie z borlandową funkcją "Pos", która jako argument pobiera znak (char) a zwraca położenie tegoż znaku.
Czy jest jakiś sposób (funkcja?), dzięki której można wykonać odwrotną operację na łańcuchu typu String?

Oto przykład pętli for i pseudo-kodu:
KOD cpp:     UKRYJ  
String tekst_string="jakis_lancuch";
for (int i=0; i<tekst_string.Length(); i++)
{
// ShowMessage("Literka nr: "+IntToStr(i)+" , Literka = "+tekst_string[i]); // tak jak w przypadku char[] nie działa <img style="vertical-align: middle;" src="./images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />
ShowMessage("Literka nr: "+IntToStr(i)+" , Literka = "+tekst_string.APos(i)); // APos = funkcja odwrotna do funkcji Pos
// funkcja Pos:
// int Pos(AnsiString) - zwraca int jako index danego znaku w łańcuchu, pobiera AnsiString (znak)
//
// funkcja APos:  -- jest coś w tym stylu w ogóle?
// char APos(int) -- zwraca char (tzn. znak), pobiera int (index)
}


Wiem, jak ten algorytm można było wykonać w standardowym C, bo wystarczyło odwołać się do index'u poprzez nawiasy kwadratowe "[" i "]", ale nie mogę znaleźć sposobu jak to zrobić w Borland C++ Builder.. :(
Pomóżcie!!! Proszę!!!

Re: [Łańcuchy znaków] Funkcja odwrotna do .Pos? (char APos(int))

Nowy postNapisane: wtorek, 12 kwietnia 2011, 15:03
przez Cyfrowy Baron
Co to znaczy odwrotną do Pos? Chcesz pobrać konkretny znak z łańcucha znaków typu AnsiString lub UnicodeString?

Re: [Łańcuchy znaków] Funkcja odwrotna do .Pos? (char APos(int))

Nowy postNapisane: wtorek, 12 kwietnia 2011, 15:25
przez samurai-jerry
Cyfrowy Baron napisał(a):Co to znaczy odwrotną do Pos? Chcesz pobrać konkretny znak z łańcucha znaków typu AnsiString lub UnicodeString?

Tak, chcę pobrać konkretny znak ale za pomocą jego pozycji (indexu) w tymże łańcuchu.
Podam przykład. Załóżmy, że posiadam łańcuch zadeklarowany i zdefiniowany jako:
KOD cpp:     UKRYJ  
String tekst_string="jakis_lancuch";

Wówczas gdybym posiadał funkcję APos mógłbym wyświetlić drugie "a" z łańcucha "jakis_lancuch" i wyświetlić za pomocą funkcji ShowMessage i APos mniej więcej w taki sposób (pseudo-kod):
KOD cpp:     UKRYJ  
ShowMessage(tekst_string.APos(6));

Oczywiście zakładam, że funkcja APos liczenie zaczyna od zera.

Tyle, że po pierwsze nie znam takiej funkcji jak APos, a po drugie zapis:
KOD cpp:     UKRYJ  
ShowMessage(tekst_string[6]);

nie zadziała (tak jak dawniej gdy korzystało się z tablic typu char (łańcuchy znaków w c).

Re: [Łańcuchy znaków] Funkcja odwrotna do .Pos? (char APos(int))

Nowy postNapisane: wtorek, 12 kwietnia 2011, 15:28
przez Cyfrowy Baron
W przypadku zmiennej char jest to proste, wystarczy podać numer indeksu licząc od 0:

KOD cpp:     UKRYJ  
char tekst[] = "jakiś tekst";
Edit1->Text = tekst[2]; // pobrany zostanie 3 znak, liczone od 0


W przypadku łańcucha znaków typu AnsiString lub UnicodeString już się tak nie da, ale można posłużyć się funkcją SubString(int od_którego, int ile_znaków):

KOD cpp:     UKRYJ  
String tekst = "jakiś tekst";
Edit1->Text = tekst.SubString(3, 1); // jeden znak od 3 pozycji, liczone od 1

Re: [Łańcuchy znaków] Funkcja odwrotna do .Pos? (char APos(int))

Nowy postNapisane: wtorek, 12 kwietnia 2011, 15:32
przez samurai-jerry
Cyfrowy Baron napisał(a):W przypadku łańcucha znaków typu AnsiString lub UnicodeString już się tak nie da, ale można posłużyć się funkcją SubString(int od_którego, int ile_znaków):

:D :D :D :D :D :D :D :D :D :D
WIELKIE DZIĘKI Cyfrowy Baronie!!!!! Oto mi właśnie chodziło, a nie mogłem w żaden sposób na to wpaść.
:D :D :D :D :D :D :D :D :D :D