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

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

dział ogólny

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

Nowy postprzez samurai-jerry » wtorek, 12 kwietnia 2011, 14:17

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ę!!!
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » wtorek, 12 kwietnia 2011, 15:03

Co to znaczy odwrotną do Pos? Chcesz pobrać konkretny znak z łańcucha znaków typu AnsiString lub UnicodeString?

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
samurai-jerry
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez samurai-jerry » wtorek, 12 kwietnia 2011, 15:25

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).
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » wtorek, 12 kwietnia 2011, 15:28

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

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
samurai-jerry
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez samurai-jerry » wtorek, 12 kwietnia 2011, 15:32

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
"No pain no gain" - Scorpions
Avatar użytkownika
samurai-jerry
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): sobota, 19 lutego 2011, 19:04
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: W98,W2K,WXP
Kompilator: Borland C++ Builder v6.0 Personal
wxDevCpp v.6.9
ChromeIDE+Masm32
KDevelop
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości