2010-10-07 3 views
0

Quelle est la séquence d'échappement pour '"' dans C? En d'autres termes, comment puis-je demander à un While pour rechercher un occurance de ' " «"séquence d'échappement dans C?

+0

Pour clarifier: étant donné un 'char *' vous voulez arrêter quand vous trouvez un guillemet? –

Répondre

11

Dans une constante de caractère, vous n'avez pas besoin d'échapper au caractère ",? Vous pouvez simplement utiliser '"'

.

dans une chaîne de caractères, vous avez besoin d'échapper au caractère " puisqu'il est le délimiteur, vous faites cela en préfixant avec une barre oblique inverse ("\"")

Notez que vous pouvez échapper au caractère " dans une constante de caractère (. '\"'); ce n'est tout simplement pas nécessaire

+0

Vous pouvez également utiliser '\ x22' à la place de' \ "' pour rechercher une double-citation dans une chaîne – Zabba

+0

@Zabba: Si je voyais '\ x22' dans une revue de code, je le considérerais presque assurément [ un code majeur WTF] (http://28.media.tumblr.com/tumblr_kpu8502s7I1qa3ti5o1_400.jpg) –

+6

Bien sûr - vous devriez l'écrire comme \ 042 –

1

Vous voulez chercher "\""

0

Le caractère '"', code ASCII 34. "In a string literal you escape it like \" this".

1

utilisation strchr() de string.h

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
     char str[] = "This is a sample string with \" another \""; 
     char * pch; 
     printf ("Looking for the '\"' character in: %s ...\n",str); 
     pch=strchr(str,'"'); 
     while (pch!=NULL) 
     { 
      printf ("found at %d\n",pch-str+1); 
      pch=strchr(pch+1,'\"'); 
     } 
     return 0; 
} 
+1

vous n'avez vraiment pas besoin d'utiliser string.h pour cela. ' while (* pch ++! = '"' && * pch);' déplace 'pch' à la première position d'une double citation ou jusqu'à la fin de la chaîne. –

+2

Mais 'strchr' peut être plusieurs fois plus rapide avec de grandes chaînes, en raison de la possibilité de rechercher des mots entiers (ou des entiers entiers de 16 octets avec sse, etc.) à la fois. –

+0

Le flip est que 'strchr' perd l'information sur la longueur de la chaîne si le caractère n'a pas été trouvé, donc vous devez gaspiller' O (n) 'time en appelant' strlen' pour le retrouver si vous en aviez besoin. Une alternative serait 'strcspn', mais il est peu probable qu'elle soit optimisée dans le cas d'un jeu de caractères unique. –