Lengde på String Uten innebygd funksjon i C ++

Lengde på String Uten innebygd funksjon i C ++


Normalt kan en programmerer hente lengden av en setning (eller streng) i noen C ++ program ved kall strengen "lengde ()" metoden. Men strenger som er implementert i C ++ var ikke alltid tilgjengelig, og programmerere ikke har tilgang til ferdige metoder som length (). Telle lengden av en streng uten å bruke dette bygget i metoden innebærer forståelse streng, c-stil karakter matriser, og hvordan du kan iterere over dem.

C ++ Strenger og C Strings

I C ++, den innebygde datatype "streng" representerer setninger, uttrykk eller ord. Men strengen datatype faktisk representerer det programmerere kaller en "c-stil" streng. I den opprinnelige C-språk, programmerere lagret setninger som samlinger (eller arrays) av tegn. Så mens i C ++, ser en setning variabeldeklarasjon som:

string str = "Hei";

i C, den samme erklæringen ser slik ut:

røye str [50] = "Hei";

Der "str" ​​representerer en rekke 50 tegn. Videre, siden C-stil strenger er ganske enkelt matriser, de alle ende med en nullavsluttende tegn ( "\ 0") som betegner slutten av strengen.

Den "c_str ()" Metode

Det interessante med strykere i C ++ er at de er en klasse, og som en klasse inneholder metoder for å gjøre arbeidet på strengen. En av disse metoder ( «c_str ()») returnerer en C-stil streng som representerer den C ++ strengen. Dette betyr at returverdien vil ende opp som et tegn matrise inneholdende tegnene i strengen, herunder null avslutningstegn.

Kopiering av C String

Å faktisk gjøre noe med C-stil streng hentet fra c_str (), må programmerer for å sette det inn i en karakter array. Dette krever at "strcpy" metoden, som vil kopiere en karakter array til en annen:

inkluderer <string> inkluder <cstring> inkluder <iostream>

bruker namespace std;

string str = "A String";

røye Str2 [50];

strcpy (Str2, str.c_str ())

Nå vil den C-stil strengrepresentasjon av "str" ​​kopier inn i karakteren array "str2" (inkludert null-tegn).

Telle tegn

Nå at programmereren har en rekke kopi av strengen, herunder nulltegnet som vil informere programmereren når strengen slutter, blir det et spørsmål om simpelthen å telle tegnene til programmet treffer nulltegnet:

int i = 0;

while (Str2 [i]! = "\ 0") {

i ++

}

cout << i + 1;

Den "mens" loop sjekker hvert tegn fra begynnelsen (den 0. tegnposisjon) til å nå null tegn. Deretter programmet utskrifter i + 1 (fordi indeksen starter på 0, og null tegn stilling regnes ikke) som resulterer i en returverdi av åtte.