2011-12-08 66 views
9

Básicamente solo quiero recorrer una cadena de caracteres para extraer cada uno y cada uno debe ser de tipo const char * para poder pasarlo a una función. heres un ejemplo. Gracias por tu ayuda.C++ convertir char a 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

qué quiere llamar a la func() con "a", a continuación, "b" y así sucesivamente? ¿Por qué? Esta pregunta es difícil de responder. –

Respuesta

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

Se da un const char * terminada en cero para cada carácter.

+2

No es el que menosprecia, pero esto no responde a la pregunta que realmente hizo OP. –

+0

esto es exactamente lo que necesitaba hacer y thestring [i] dio los resultados de abc123, bc123, c123, 123, 23, 3. Esto me dio cada carácter individual gracias – user1054513

19

que puede tomar la dirección de ese elemento:

theval = &thestring[i]; 
+2

+1: Esto es todo. –

4

lo general, un const char * apunta a una cadena terminada en cero completo, no un solo carácter, por lo que la pregunta si esto es realmente lo que quiero hacer.

Si es realmente lo que quiere, la respuesta es fácil:

theval = &thestring[i]; 

Si la función es realmente esperaba una cadena, pero desea pasar una cadena de un solo carácter, un enfoque ligeramente diferente se llama para:

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

Dado que ya está usando cadenas, supongo que solo está buscando un puntero a char. –

+1

@LuchianGrigore, es obvio que la función requiere un puntero para char, pero no es obvio por qué. Es trivial pasar un carácter único como parámetro, por lo que es mucho más probable que la función tome un puntero a una cadena terminada en nulo. –

3

Supongo que la llamada func está esperando una cadena C a medida que se ingresa. En cuyo caso se puede hacer lo siguiente:

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); 
} 

Esto producirá una pequeña C-string (terminada en nulo serie de caracteres) que será de longitud 1 para cada iteración.

El ciclo for se puede hacer con un índice (como lo escribiste) o con los iteradores (como lo escribí) y tendrá el mismo resultado; Prefiero el iterador solo por coherencia con el resto del STL.

Otro problema a tener en cuenta (aunque esto puede ser el resultado de generalizar el código) es que el result se sobrescribirá en cada iteración.

0

Puede mantener la dirección de ese elemento:

theval = &thestring[i];

+0

¿Podría formatear el código resaltándolo y presionando Ctrl + K – WhatsThePoint