2010-04-07 19 views
6

Si tengo dos tipos de cadenas como:comprobando El último carácter de la cadena en c

const char *str1 = "This is a string with \"quotes escaped at the end\""; 
const char *str2 = "This is a \"string\" without quotes at the end"; 

testFn(str1); 
testFn(str2); 

int testFn(const char *str) 
{ 
    // test & return 1 if ends on no quote 
    // test & return 0 if ends on quote 
    return; 
} 

me gustaría probar si la cadena termina con una cita "o no

lo que sería una buena manera de probar esta Gracias

+5

Deberías cambiar eso a 'int testFn (const char * str)' –

+0

¡Muchas gracias a todos! – radar75

+1

¡No olvides aceptar una de las respuestas! ;-) – slacker

Respuesta

9

no olvide asegurarse de que su cadena tiene al menos 1 carácter:?

int testFn(const char *str) 
{ 
    return (str && *str && str[strlen(str) - 1] == '"') ? 0 : 1; 
} 
+0

Tiene el resultado invertido. Verifique la especificación dada por OP. – slacker

+0

@slacker - sí, lo noté después de escribirlo pero ya actualicé mi ejemplo con '?:' –

+2

'(expresión)? 0: 1' es una forma divertida de escribir '! (Expresión)' :) – caf

4
int testFn(const char *str) 
{ 
    return !str || !*str || str[strlen(str) - 1] != '\"'; 
} 
+2

No maneja la cadena de 0 de longitud correctamente. –

+0

Podría bloquearse en una cadena vacía – slacker

1
int testFn(const char *str) 
{ 
    if(*str && str[strlen(str + 1)] == '"') 
    return 0; 
    else 
    return 1; 
} 
+0

Tus bloqueos en el puntero nulo ;-) –

+0

@ Péter Török: Claro que sí. No lo pase a esta función, entonces :). – slacker

+0

Si no pasas una cadena de longitud cero a la mía, no pasaré un puntero nulo al tuyo, ¿de acuerdo? :-) –

-1

Una cadena de longitud cero ... no es una cadena, igual que un número; no me importa cómo lo defina. Los punteros nulos requieren su propio manejo porque son su propia categoría. Hay indicaciones para la estupidez retransmitida, pero solo te llevarán tan lejos. Tienes que definir todo. Comienzo con punteros nulos porque NADA los maneja. Espera ... Python sí. Tal vez estás en el foro equivocado.

Ahora necesito encontrar mi función segfault. Sé que lo escribí porque mantiene a los seres referenciados, simplemente no puedo encontrarlo.

+0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la crítica] (/ reseña/mensajes de baja calidad/18842954) –

Cuestiones relacionadas