Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
chaines [2015/06/24 17:33] 78.228.100.13 |
chaines [2016/06/22 14:35] (Version actuelle) krazyxx Lien chapitre suivant/précédent - bas de page |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ^ [[hello_world|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[histoire|Chapitre suivant]] ^ | + | ^ [[hello_world|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[qualite_logiciel|Chapitre suivant]] ^ |
__ Todo : tabulation, retour à la ligne, quoted. Caractère spéciaux sous forme hexa. __ | __ Todo : tabulation, retour à la ligne, quoted. Caractère spéciaux sous forme hexa. __ | ||
Ligne 8: | Ligne 8: | ||
===== Chaînes de caractères et caractères ===== | ===== Chaînes de caractères et caractères ===== | ||
- | Comme vous pouvez remarquer, on distingue en C++ les caractères uniques et les chaînes de caractères (un ensemble de caractères). Un caractère unique sera écrit avec un guillemet simple droit, une chaîne de caractères sera écrite avec des guillemets double droits : | + | Comme vous pouvez remarquer, on distingue en C++ les caractères uniques et les chaînes de caractères (un ensemble de caractères). Un caractère unique sera écrit avec un guillemet simple droit, une chaîne de caractères sera écrite avec des guillemets doubles droits : |
<code cpp main.cpp> | <code cpp main.cpp> | ||
Ligne 19: | Ligne 19: | ||
</code> | </code> | ||
- | Si vous essayer de mettre plusieurs caractères entre guillemets droits, vous obtiendrez généralement un message d'avertissement. Par exemple, le message est avec Clang dans Coliru : | + | Si vous essayez de mettre plusieurs caractères entre guillemets droits, vous obtiendrez généralement un message d'avertissement. Par exemple, le message est avec Clang dans Coliru : |
<code cpp main.cpp> | <code cpp main.cpp> | ||
Ligne 83: | Ligne 83: | ||
<code> | <code> | ||
- | main.cpp:4:30: warning: missing terminating " character | + | main.cpp:4:28: error: expected ';' after expression |
- | std::cout << "hello " world" << std::endl; | + | |
- | ^ | + | std::cout << "hello " world" << std::endl; |
- | main.cpp:4:3: error: missing terminating " character | + | |
- | std::cout << "hello " world" << std::endl; | + | ^ |
- | ^ | + | |
- | main.cpp: In function 'int main()': | + | ; |
- | main.cpp:4:25: error: expected ';' before 'world' | + | |
- | std::cout << "hello " world" << std::endl; | + | main.cpp:4:34: warning: missing terminating '"' character [-Winvalid-pp-token] |
- | ^ | + | |
+ | std::cout << "hello " world" << std::endl; | ||
+ | |||
+ | ^ | ||
+ | |||
+ | main.cpp:4:29: error: use of undeclared identifier 'world' | ||
+ | |||
+ | std::cout << "hello " world" << std::endl; | ||
+ | |||
+ | ^ | ||
+ | |||
+ | 1 warning and 2 errors generated. | ||
</code> | </code> | ||
- | L'erreur est simple à comprendre avec un peu de logique. En C++, une chaîne de caractères est délimitée par des guillemets. Le compilateur va rencontrer le premier guillemet et va l'interprété comme le début d'une chaîne (et donc tout ce qui suit sera considéré comme des caractères faisant partie de la chaîne). | + | L'erreur est simple à comprendre avec un peu de logique. En C++, une chaîne de caractères est délimitée par des guillemets. Le compilateur va rencontrer le premier guillemet et va l'interpréter comme le début d'une chaîne (et donc tout ce qui suit sera considéré comme des caractères faisant partie de la chaîne). |
<code> | <code> | ||
Ligne 128: | Ligne 140: | ||
Un autre problème se présente. Puisque le caractère ''\'' est considéré comme étant le caractère d'échappement, comment afficher le caractère ''\'' dans une chaîne ? La solution est simple, il suffit d'utiliser le caractère '\\'. | Un autre problème se présente. Puisque le caractère ''\'' est considéré comme étant le caractère d'échappement, comment afficher le caractère ''\'' dans une chaîne ? La solution est simple, il suffit d'utiliser le caractère '\\'. | ||
- | Encore une fois, il s'agit bien d'une séquence d'échappement, qui correspond à un seul caractère dans la chaîne et qui est constitué du caractère d'échappement ''\'' puis de l'identifiant ''\''. | + | Encore une fois, il s'agit bien d'une séquence d'échappement, qui correspond à un seul caractère dans la chaîne et qui est constituée du caractère d'échappement ''\'' puis de l'identifiant ''\''. |
Ligne 151: | Ligne 163: | ||
Dans certains cas, une chaîne va contenir de nombreux caractères spéciaux (par exemple, le chemin d'un fichier sous Windows, qui peut contenir plusieurs ''\'' ou des expressions régulières). Dans ce cas, il devient fastidieux (c'est pas faux !) de devoir ajouter systématiquement le caractère d'échappement ''\'' devant chaque caractère spécial. | Dans certains cas, une chaîne va contenir de nombreux caractères spéciaux (par exemple, le chemin d'un fichier sous Windows, qui peut contenir plusieurs ''\'' ou des expressions régulières). Dans ce cas, il devient fastidieux (c'est pas faux !) de devoir ajouter systématiquement le caractère d'échappement ''\'' devant chaque caractère spécial. | ||
- | Pour éviter cela, il est possible d'utiliser une chaîne brute, dans laquelle les caractères spéciaux sont ignorés. Une chaîne brute doit commencer (par défaut) par ''R("'' et se terminer par ''")'', tout ce qui trouve entre deux sera interprété comme des caractères à afficher. | + | Pour éviter cela, il est possible d'utiliser une chaîne brute, dans laquelle les caractères spéciaux sont ignorés. Une chaîne brute doit commencer (par défaut) par ''R"('' et se terminer par '')"'', tout ce qui se trouve entre les deux sera interprété comme des caractères à afficher. |
<code cpp main.cpp> | <code cpp main.cpp> | ||
Ligne 157: | Ligne 169: | ||
int main() { | int main() { | ||
- | std::cout << R("Je fais des " tests pour \ apprendre le C++ !") << std::endl; | + | std::cout << R"(Je fais des " tests pour \ apprendre le C++ !)" << std::endl; |
} | } | ||
</code> | </code> | ||
Ligne 167: | Ligne 179: | ||
</code> | </code> | ||
- | Remarquez bien que les parenthèses en début et fin de chaînes (celles correspondantes à ''R("'' et ''")'') ne font pas partie de la chaîne et ne sont pas affichées. | + | Remarquez bien que les parenthèses en début et fin de chaîne (celles correspondantes à ''R"('' et '')"'') ne font pas partie de la chaîne et ne sont pas affichées. |
Si vous êtes attentif (et que vous cherchez un peu les problèmes...), vous avez peut être testé un code similaire au suivant : | Si vous êtes attentif (et que vous cherchez un peu les problèmes...), vous avez peut être testé un code similaire au suivant : | ||
Ligne 238: | Ligne 250: | ||
} | } | ||
</code> | </code> | ||
- | |||
- | **Exos** : include, recherche quel include pour utiliser vector ? array ? etc | ||
**Exos** : utiliser tabulation pour afficher un tableau | **Exos** : utiliser tabulation pour afficher un tableau | ||
Ligne 273: | Ligne 283: | ||
**Exos : ASCII art** | **Exos : ASCII art** | ||
- | ^ [[hello_world|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[histoire|Chapitre suivant]] ^ | + | ^ [[hello_world|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[qualite_logiciel|Chapitre suivant]] ^ |
{{tag> Cours C++}} | {{tag> Cours C++}} |