Normalt kan en programmerare hämta längden av en mening ( eller string ) i alla C + + -program genom kallelser strängens " längd ( ) " metoden . Men strängar implementeras som i C + + var inte alltid tillgängliga , och programmerare inte har tillgång till färdiga metoder såsom längd ( ) . Räkna längden av en sträng utan att använda denna inbyggda metod innebär förståelse sträng , c - liknande uppställningar karaktär , och hur man iterera över dem . C + + Stråkar och C Strings
C + + , den inbyggda datatypen " string " representerar meningar , fraser eller ord . Dock representerar datatypen String faktiskt vad programmerare kallar ett " c - style " sträng . I den ursprungliga C-språket , programmerare lagrade meningar som samlingar ( eller matriser ) av tecken . Så medan i C + + , ser en mening variabeldeklaration som:
string str = " Hej ";
i C , ser samma förklaring som:
char str [ 50 ] = " Hej ";
Där " str " representerar en grupp av 50 tecken . Eftersom C - stil strängar är helt enkelt arrayer , de alla slutar med en Null avslutande karaktär ( " \\ 0 " ) som innebär slutet på strängen .
" C_str ( ) " Method
det intressanta strängar i C + + är att de är en klass , och som en klass innehåller metoder för att göra arbetet på strängen . En av dessa metoder ( " c_str ( ) ") returnerar en C- stil sträng som representerar den C + + sträng. Detta innebär att avkastningen värdet kommer att sluta som ett tecken array som innehåller de tecken i strängen , inklusive null uppsägning karaktär .
Kopiera C String
för att verkligen göra något med C - stil sträng hämtas från c_str ( ) , måste programmeraren att sätta den i en karaktär array . Detta kräver att " strcpy " metoden , vilket kommer att kopiera ett tecken array till en annan :
# include
# include
# include < , iostream >
using namespace std ;
string str = "en sträng ";
röding str2 [ 50 ] ;
strcpy ( str2 , str . c_str ( ) ) katalog
nu kommer C - stil sträng representation av " str " kopiera in tecknet array " str2 " ( inklusive null - tecken ) .
Räkna tecken
nu att programmeraren har en rad kopia av strängen , inklusive null karaktär som kommer att informera programmeraren när strängen slutar , blir det en fråga om att bara räkna tecken tills programmet träffar null karaktär :
int i = 0 ;
while ( ! str2 [ i] = " \\ 0 " ) {
i + + Review
}
cout << i + 1 ;
" medan " loop kontrollerar varje tecken från början ( den 0: e tecknet ) tills de når nulltecknet . Sedan skriver programmet i +1 ( eftersom indexet startar på 0 och null tecknet räknas inte ) , vilket resulterar i ett returvärdet 8 .