2012-05-01 7 views
5

Tengo una cadena como esta:eliminación de todo, por el personaje (y también de carácter)

std::string string1 = "xjdfhfakdjs%54k34k.-jk34"; 

i necesidad de obtener sólo "" xjdfhfakdjs", pero la cadena es dinámica, no hardcoded así que no sé lo que es ella, la duración, etc., así que quería para eliminar todo lo que después%, y también el% Char

¿Cómo podría hacer esto

+3

¿Ya has probado algo? En general, es una pregunta mejor (y muestra un esfuerzo de buena fe de su parte) si puede decir: "Esto es lo que he intentado". –

Respuesta

1

std :: string mystr = string1.substr (0, string1.find ("%", 0));

Creo que funcionará.

15
std::string the_prefix_you_want = string1.substr(0, string1.find("%")); 

Ver:.? http://www.cplusplus.com/reference/string/string/find/ una nd http://www.cplusplus.com/reference/string/string/substr/ para más detalles

+0

@chris: No, no lo es. Él hace una copia, la tuya no. –

+0

Solo depende de si desea una cadena nueva o no (es decir, si desea seguir teniendo acceso a la cadena original). Si no, entonces la respuesta de Chris es buena. –

+0

Me parece mucho menos complicado de usar. El tiempo necesario para copiar probablemente no sea muy importante (al menos el OP no mencionó nada). – chris

0

hizo algo parecido a C, que funciona en su forma actual, pero sin duda más torpe que los métodos que se muestran arriba:

#include <windows.h> 
void main() 
{ 
    int i; 
    wchar_t searchString[100]; 
    wchar_t * stringReturn; 
    memset(searchString, L'\0', sizeof(stringReturn)); 
    wcscpy_s(searchString, 100, L"String\\ to search"); 
    stringReturn = wcschr (searchString, '\\'); 
    if (stringReturn) 
    { 
     for (i = 0; i < (int)(stringReturn - searchString); i++) stringReturn[i] = searchString[i]; 
     stringReturn[i] = L'\0'; 
     wcscpy_s(searchString, 100, stringReturn); 
    } 
} 

se puede modificar fácilmente para trabajar para cuerdas dinámicas.

Cuestiones relacionadas