Si j'ai deux types de cordes telles que:
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;
}
3 Réponses :
int testFn(const char *str)
{
return !str || !*str || str[strlen(str) - 1] != '\"';
}
Pourrait s'écraser sur une chaîne vide
N'oubliez pas de vous assurer que votre chaîne a au moins 1 caractère:
(expression)? 0: 1 code> est une façon amusante d'écrire ! (Expression) code> :)
@CAF: Peut-être drôle, mais dans ce cas définitivement plus lisible.
@CAF - La raison pour laquelle je préfère ?: code> est que toute l'expression se lit de gauche à droite.
int testFn(const char *str)
{
if(*str && str[strlen(str + 1)] == '"')
return 0;
else
return 1;
}
@ PÉTER Török: une chaîne zéro est une chaîne correcte. Un pointeur nulle fait pas b> décrire une chaîne correcte. Le transmettre comme un argument ici viole la spécification d'entrée. Je déteste des chèques inutiles, ils tuent la performance (quand ils s'accumulent).
@ Péter Török: Je n'ai pas fait. Il suffit de fixer des choses directement pour d'autres lecteurs :-). Je
Vous devriez changer cela en
int testfn (const char * str) code>