2011-12-08 3 views
9

In pratica voglio solo eseguire il ciclo di una stringa di caratteri per estrarre ciascuno e ognuno deve essere di tipo const char * così posso passarlo a una funzione. ecco un esempio. Grazie per l'aiuto.C++ converte char in const char *

string thestring = "abc123"; 
    const char* theval; 
    string result; 

    for(i = 0; i < thestring.length(); i++){ 
     theval = thestring[i]; //somehow convert this must be type const char* 
     result = func(theval); 
    } 
+3

Vuoi chiamare il func() con "a", poi "b" e così via? Perché? Questa domanda è difficile da rispondere. –

risposta

13
string sym(1, thestring[i]); 
theval = sym.c_str(); 

Esso fornisce una terminazione Null const char * per ogni carattere.

+2

Non è il tuo down-motor, ma questo non risponde alla domanda OP effettivamente posta. –

+0

questo è esattamente ciò di cui avevo bisogno di fare & thestring [i] ha dato risultati di abc123, bc123, c123, 123, 23, 3. Questo mi ha dato ogni singolo carattere grazie – user1054513

19

si può prendere l'indirizzo di tale elemento:

theval = &thestring[i]; 
+2

+1: è così. –

4

Di solito un const char * sta puntando ad una stringa null-terminated pieno, non un singolo carattere, quindi mi chiedo se questo è davvero quello che si voglio fare.

Se è davvero questo che vuoi, la risposta è semplice:

theval = &thestring[i]; 

Se la funzione è in realtà in attesa di una stringa, ma si vuole passare una stringa di un solo carattere, un approccio leggermente diverso si chiama per:

char theval[2] = {0}; 
theval[0] = thestring[i]; 
result = func(theval); 
+0

Dal momento che sta già usando le stringhe, suppongo che stia solo cercando un puntatore. –

+1

@LuchianGrigore, è ovvio che la funzione richiede un puntatore al char ma non è ovvio perché. È banale passare un singolo char come parametro, quindi è molto più probabile che la funzione assuma un puntatore a una stringa con terminazione null. –

3

Suppongo che la chiamata func sia in attesa di una stringa C durante l'immissione. In questo caso è possibile eseguire le seguenti operazioni:

string theString = "abc123"; 
char tempCString[2]; 
string result; 

tempCString[1] = '\0'; 

for(string::iterator it = theString.begin(); 
    it != theString.end(); ++it) 
{ 
    tempCString[0] = *it; 
    result = func(tempCString); 
} 

Ciò produrrà un piccolo C-stringa (null terminata array di caratteri) che sarà di lunghezza 1 per ogni iterazione.

Il ciclo for può essere eseguito con un indice (come è stato scritto) o con gli iteratori (come ho scritto) e avrà lo stesso risultato; Preferisco l'iteratore solo per coerenza con il resto dell'STL.

Un altro problema qui da notare (anche se questi possono essere solo il risultato della generalizzazione del codice) è che il result verrà sovrascritto su ogni iterazione.

0

È possibile mantenere l'indirizzo di tale elemento:

theval = &thestring[i];

+0

Potresti per favore formattare il codice evidenziandolo e premendo Ctrl + K – WhatsThePoint