Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Stringek


      A basic_string
osztálysablon sok olyan alapfunkciót tartalmaz ami a karakterláncok feldolgozásához
szükséges, mint például a törlés vagy a keresés. Mindez a
namespace std-ben van definiálva és ugyanitt található
a
typedef basic_stringchar> string deklaráció is, amely a string álnevet adja a basic_stringchar> -nek. Egy string objektum létrehozható például a string
s1("Hello")

utasítással, amely létrehoz egy
string objektumot egy const char* típusból, amely a Hello karaktereket tartalmazza a \0 terminátort leszámítva. A char* típusú karakterláncoktól eltérően a
string objektumok nem kell tartalmazzák a
NULL-t az utolsó pozíción. Ha az objektumot a string s1(8, ’x’) utasítással hozzuk létre, akkor az 8
darab x karakter fog tartalmazni. Ezek mellett a
string rendelkezik még implicit konstruktorral
és egy másoló konstruktorral is.





Stringek értékadása és
összefűzése


     
A referenciákkal létező változókra hivatkozunk, ezért minden referencia
deklarálásnál rögtön meg is kell határozni (inicializálni kell), hogy mire megy
a hivatkozás:





#include


using std::cout;


using std::endl;


#include


using std::string;





int main()


{


     string
s1("cat"), s2, s3;


    


     s2 =
s1;        //értékadás


     s3.assign(s1);  //értékadás
assign()-el


     cout
"s1: "
"\ns2: " "\ns3: " "\n\n";


    


     s2[0]
= s3[2] = 'r';


     cout
"s2[0] = s3[2] = 'r':\n"

"s1: " "\ns2: " "\ns3: ";


     int len = s3.length();


     for(int x = 0; x len; ++x)


           cout


          


     string
s4(s1 + "apult"), s5; // s4=s1+apult, s5=""


     s3 +=
"pet";                 // s3=s3+pet


     s1.append("acomb");          // s1=s1+"acomb"


     s5.append(s1,
4, s1.size()); // s5=s1-cata


     cout
"\n\nÖsszefűzés után:\n"

"s1: " "\ns2: " "\ns3: " "\ns4: " "\ns5: "


    


     return 0;


}





A kimenet:


s1: cat


s2: cat


s3: cat





s2[0] = s3[2] =
'r':


s1: cat


s2: rat


s3: car





Összefűzés után:


s1: catacomb


s2: rat


s3: carpet


s4: catapult


s5: comb





Az s2 = s1 utasítás két objektum között tesz egyenlőséget, s2 az s1 másolata lesz. Ugyanez teszi az assign() függvény is, s3 lesz az s1 másolata. A [] operátorral elérhetőek a string elemei,
az
at() függvény emellett
leellenőrzi az index korlátait is. Az
append()függvény a karakterláncok összefűzését valósítja
meg. Az
s5.append(s1,
4, s1.size())
utasítás
hozzáfűzi
s5-höz az s1 negyedik pozíciójától számított
karaktereket.





Substringek


     
A
string osztály substr
függvénye lehetővé teszi egy substring kivételét a stringből.





#include


using std::cout;


#include


using std::string;





int main()


{


     string
s("The airplane flew away.");


     cout


     return 0;


}





A kimenet:


plane





A s.substr(7,5) utasítás kiveszi a 7 és 5 pozíciók közti substringet téríti vissza az s-ből.





A string objektumok
tulajdonságai


     
A string osztálynak egyes függvényei információt szolgáltatnak a
karakterláncról, mint a hosszúság, maximális hosszúság és kapacitás. A string
hossza az objektumban lévő karakterek pillanatnyi száma. A kapacitás az a
legnagyobb szám, amit még a string eltárolhat anélkül, hogy megnőne a számára
lefoglalt memória. A maximális hossz a string objektumnak lefoglalható
legnagyobb memória.





#include


using std::cout;


using std::cin;


#include


using std::string;





void printStats(const
string&);





int main ()


{


     string
s;


     cout
"Statisztikák a beolvasás
előtt:\n"
;


     printStats(s);


     cout
"\n\nOlvass be egy stringet: "
;


     cin
>> s;


     cout
"A beolvasott string: "

"\nStatisztikák a
beolvasás után:\n";


     printStats(s);


     s.resize(s.length()+10);


     cout
"\n\nResize után (length+10):\n"
;


     printStats(s);


     s.append("addition");


     cout
"\nA beolvasott string: "



     return 0;


}


void printStats(const
string& str)


{


     cout
"Kapacitás: "
str.capacity()


          "\nMax hosszúság: " str.max_size()


          "\nHosszúság: " str.size()


          "\nÜres? " "igen" : "nem");


}





A kimenet:


Statisztikák a
beolvasás előtt:


Kapacitás: 0


Max hosszúság:
4611686018427387897


Hosszúság: 0


Üres? igen





Olvass be egy
stringet: onceuponatime


A beolvasott
string: onceuponatime


Statisztikák a
beolvasás után:


Kapacitás: 16


Max hosszúság:
4611686018427387897


Hosszúság: 13


Üres? nem





Resize után
(length+10):


Kapacitás: 32


Max hosszúság:
4611686018427387897


Hosszúság: 23


Üres? nem


A beolvasott
string: onceuponatime          addition





A program deklarál egy string objektumot, amely eleinte üres. A
karakterlánc beolvasása után a
printStats() függvény 13 hosszúságot ír ki, amit a beolvasott karakterek számára utal.
A karakterlánc számára lefoglalt kapacitás egyenlő az ehhez legközelebb álló
kettő hatványával, 16-tal. A hosszúság növelése automatikusan megnöveli a kapacitást
is. A hosszúságnövelés üres karakterek beszúrását jelenti.





Keresés a stringben





#include


using std::cout;


#include


using std::string;





int main()


{


     //a fordító egyetlen stringgé alakítja a tördelt szöveget


     string
s("Egy baloldali részfa elemei "


              "\nkisebbek,
mint a csúcs elemei"


              "\nés a
jobboldali részfa elemei"


              "\nnagyobbak,
mint a csúcs elemei."
);


     cout
"Az eredeti szöveg:\n"



     //a "részfa" substring keresése


     cout
"\n\nAz első \"részfa\"
kezdete: "
"részfa");


     cout
"\nAz utolsó \"részfa\"
kezdete: "
"részfa");


     //a 'z' karakter keresése


     cout
"\nAz első karakter
\"qpxz\"-ből: "
"qpxz");


     cout
"\nAz utolsó karakter
\"qpxz\"-ből: "
"qpxz");


     //a '-' karakter keresése


     cout
"\nAz első karakter amely nincs benne
a \"dntusbgmcvp\"-ben: "


          "dntusbgmcvp");


     //a '\n' karakter keresése


     cout
"\nAz utolsó karakter, amely nincs
benne a \"dntusbgmcvp\"-ben: "


          "dntusbgmcvp");


    


     return 0;


}





A kimenet:


Az eredeti szöveg:


Egy baloldali részfa elemei


kisebbek, mint a csúcs
elemei


és a jobboldali részfa
elemei


nagyobbak, mint a csúcs
elemei.





Az első "részfa"
kezdete: 14


Az utolsó "részfa"
kezdete: 75


Az első karakter
"qpxz"-ből: 17


Az utolsó karakter
"qpxz"-ből: 78


Az első karakter amely nincs
benne a "dntusbgmcvp"-ben: 0


Az utolsó karakter, amely
nincs benne a "dntusbgmcvp"-ben: 119





A main függvényben deklarálva és
inicializálva van az
s
objektum. A fordító mind a 4 sort összefűzi még mielőtt a program elindulna. Az
s.find("reszfa") utasítás visszatéríti a reszfa szó kezdő pozícióját az s stringben. Ha nem találja, akkor a string::npos konstanst téríti vissza. Az s.rfind("reszfa") utasítás a legutolsó reszfa szó kezdő pozícióját téríti vissza. Az s.find_first_of("qpxz") függvény megkeresi s-ben a gpxz bármely karakterének első előfordulási helyét. Az s.find_last_of("qpxz") függvény ugyanígy az utolsó előfordulási helyet
kutatja. Az
s stringben a z az amit megtalál a gpxz substringből. A s.find_first_not_of("dntusbgmcvp") utasítás azt az első olyan karaktert keresi s-ben, amely nem része a dntusbgmcvp substringnek.  A s.find_last_not_of("dntusbgmcvp") pedig az utolsó olyan karaktert keresi
amely nem része ennek.





Karakterek behelyettesítése





#include


using std::cout;


#include


using std::string;





int main()


{


     string
s("Egy baloldali rőszfa elemei "


              "\nkisebbek, mint a csúcs elemei"


              "\nés a jobboldali részfa elemei"


              "\nnagyobbak, mint a csúcs elemei.");





     s.erase(62);
                //mindent kitöröl
62-től


     cout
"A törles utan:\n"






     int x = s.find("
"
);         //megkeresi az első szóközt  


     while(x != string::npos)     //amíg
nincs vége a stringnek


     {


           s.replace(x,
1, ".");  //addig
kicseréli a szóközt pontra


           x=s.find(" ",x+1);     //és megkeresi a
következő szóközt


     }


    



This post first appeared on Altair Gate - News, please read the originial post: here

Share the post

Stringek

×

Subscribe to Altair Gate - News

Get updates delivered right to your inbox!

Thank you for your subscription

×