Commandes C pour travailler avec une chaîne. Entrée et sortie de chaînes de caractères en C

Travailler avec des cordes. Classe de chaînes. Constructeurs de classes. Fonctions assign() , append() , insert() , replace() , delete() , find() , rfind() , compare() , c_str() . Exemples

1. Quel est le but de la classe string dans les programmes C++ ?

La classe string est conçue pour fonctionner avec des chaînes char*, qui sont des chaînes terminées par un caractère nul. La classe string a été introduite comme alternative au travail avec les chaînes char*. Lignes qui se terminent par un caractère ‘\0’ également appelés cordes C. Puisque string est une classe, vous pouvez déclarer des objets de cette classe.

2. Quels modules (bibliothèques) doivent être connectés pour utiliser les capacités de la classe string dans MS Visual Studio C++ ?

Pour utiliser les capacités de la classe string dans MS Visual Studio (C++), vous devez inclure la bibliothèque et l'espace de noms std.

#inclure en utilisant l'espace de noms std ;
3. Comment est déclarée une variable de type chaîne ? Exemples

La déclaration d'une variable de type chaîne se fait de la même manière qu'une variable ordinaire. Variante possible de déclaration avec initialisation simultanée.

// tape la chaîne chaîne s1 ; // variable nommée s1 de type chaîne string s2 = "Ceci est une variable chaîne" ; // déclaration avec initialisation // utilisation d'une variable de type chaîne avec un opérateur d'affectation s1 = s2 ; // s1 = "Ceci est une variable chaîne" s2 = "Nouveau texte" ;
4. Quels sont les avantages et les inconvénients de l’utilisation de la classe string par rapport au type char* ?

La création du nouveau type de chaîne était due aux inconvénients du travail avec les chaînes de caractères, qui démontraient le type char*. Par rapport au type char*, le type string présente les principaux avantages suivants :

  • capacité à traiter des chaînes à l'aide d'opérateurs C++ standard ( = , + , = = , <> etc.). Comme vous le savez, lors de l'utilisation du type char*, même les opérations les plus simples avec des chaînes semblaient compliquées et nécessitaient l'écriture d'un code de programme excessif ;
  • assurer une meilleure fiabilité (sécurité) du code du programme. Par exemple, lors de la copie de chaînes, le type chaîne fournit les actions appropriées qui peuvent se produire si la chaîne source est plus grande que la chaîne de destination ;
  • fournir une chaîne comme type de données indépendant. La déclaration du type chaîne en tant que chaîne est la même pour toutes les variables du programme, ce qui garantit la cohérence des données.

Le principal inconvénient du type string par rapport au type char* est la vitesse de traitement des données plus lente. Cela est dû au fait que le type chaîne est en fait une classe conteneur. Et travailler avec une classe nécessite une implémentation supplémentaire du code du programme, ce qui, à son tour, prend plus de temps.

5. Quels opérateurs peuvent être utilisés avec les objets de la classe string ?

La classe string est pratique car elle vous permet de manipuler facilement des chaînes à l'aide d'opérateurs standard (surchargés).

Les opérateurs suivants peuvent être utilisés avec des objets de la classe string

  • = - affectation
  • + – concaténation (jonction de chaînes)
  • += – affectation avec concaténation
  • == – l'égalité
  • != – les inégalités
  • < - moins
  • <= – inférieur ou égal
  • > - plus
  • >= - supérieur ou égal à
  • – indexation

Exemple, qui démontre l'utilisation des déclarations ci-dessus

// type de chaîne, opérations sur les chaînes chaîne s1 = "s-1" ; chaîne s2 = "s-2" ; chaîne s3 ; bool b; // opération "=" (affectation de chaîne) s3 = s1 ; // s3 = "s-1" // opération "+" - concaténation de chaînes s3 = s3 + s2 ; // s3 = "s-1s-2" // opération "+=" - affectation avec concaténation s3 = "s-3" ; s3 += "abc" ; // s3 = "s-3abc" // opération "==" - comparaison de chaînes b = s2==s1 ; // b = faux b = s2=="s-2" ; // b = vrai // opération "!=" - comparaison de chaînes (différente) s1 = "s1" ; s2 = "s2" ; b = s1 != s2; // b = vrai // opérations "<" и ">" - comparaison de chaînes s1 = "abcd" ; s2 = "de" ; b = s1 > s2 ; // b = faux b = s1< s2; // b = true // opérations "<=" и ">=" - comparaison de chaînes (inférieur ou égal, supérieur ou égal) s1 = "abcd" ; s2 = "ab" ; b = s1 >= s2 ; // b = vrai b = s1<= s2; // b = false b = s2 >= "ab" ; // b = vrai // opération - indexation char c; s1 = "abcd" ; c = s1 ; // c = "c" c = s1; // c = "une"
6. La classe string contient-elle des constructeurs ?

Comme toute classe, la classe string possède un certain nombre de constructeurs. Les principaux sont les suivants :

Chaîne(); chaîne (const char * str); chaîne (chaîne const & str);

7. Exemples d'initialisation à l'aide de constructeurs

Vous trouverez ci-dessous des exemples d'initialisation de variables de type chaîne

Chaîne s1("Bonjour!" ); chaîne s2 = "Bonjour !" ;// initialisation - chaîne de constructeur (const char * str) char * ps = "Bonjour" ; chaîne s3(ps); // chaîne d'initialisation s4(s3);// initialisation - chaîne constructeur (chaîne const & str) chaîne s5 ;

// initialisation - constructeur string()

Pour attribuer une chaîne à une autre, vous pouvez utiliser l'une des deux méthodes suivantes :

  • utiliser l'opérateur d'affectation ‘=’ ;
  • utilisez la fonction assign() de la classe string.

La fonction assign() a plusieurs implémentations surchargées.

La première option consiste à appeler une fonction sans paramètres

Chaîne &assign(void);

Dans ce cas, il y a une simple affectation d’une chaîne à une autre.

La deuxième option vous permet de copier un nombre spécifié de caractères d'une chaîne :

Chaîne &assign(const string & s, size_type st, size_type num);

  • s – l'objet à partir duquel la chaîne source est extraite ;
  • st – index (position) dans la ligne à partir de laquelle commence la copie des caractères numériques ;
  • num – nombre de caractères à copier à partir de la position st ;
  • size_type – type de données ordinales.

La troisième variante de la fonction assign() copie les premiers caractères numériques de la chaîne s vers l'appelant :

String & assign(const char * s, size_type num);

  • s – une chaîne qui se termine par le caractère ‘\0’ ;
  • num est le nombre de caractères copiés dans l'objet appelant. Les premiers caractères numériques de la chaîne s sont copiés.

Vous trouverez ci-dessous un exemple avec différentes implémentations de la fonction assign().

Exemple.

// affectation de chaînes, fonction assign() chaîne s1 = "site" ; chaîne s2 ; chaîne s3 ; char * ps = "site" ; s3 = s1 ; // s3 = "site" s2.assign(s1); // s2 = "site" s2.assign(s1, 0, 4); // s2 = "meilleur" s2.assign(ps, 8); // s2 = "meilleur prog"
9. Combinaison de chaînes. La fonction append(). Exemple

La fonction append() est utilisée pour concaténer des chaînes. Vous pouvez également utiliser l'opération pour ajouter des lignes ‘+’ , Par exemple:

Chaîne s1 ; chaîne s2 ; s1 = "abc" ; s2 = "déf" ; s1 = s1 + s2 ; // s1 = "abcdef"

Cependant, la fonction append() est utile si vous devez ajouter une partie d'une chaîne.

La fonction dispose des options d'implémentation suivantes :

Chaîne &append(const string & s, size_type start); chaîne &append(const char * s, size_type num);

Dans la première implémentation, la fonction reçoit une référence à un objet chaîne s, qui est ajouté à l'objet appelant. Dans la deuxième implémentation, la fonction reçoit un pointeur vers une chaîne de type const char *, qui se termine par le caractère « \0 ».

Exemple. Démonstration de la fonction append().

Chaîne s1 = "abcdef" ; s2 = "1234567890" ; ajouter (s2, 3, 4); // s1 = "abcdef4567" char * ps = "1234567890" ; s1 = "abcdef" ; s1.append(ps, 3); // s1 = "abcdef123"

10. Insertion de caractères dans une chaîne. fonction insert(). Exemple

Pour insérer une ligne à une position donnée d'une autre ligne, vous devez utiliser la fonction insert(), qui propose plusieurs options d'implémentation.

La première version de la fonction vous permet d'insérer la chaîne entière s à la position de départ spécifiée de la ligne appelante (l'objet appelant) :

Chaîne & insert (size_type start, const string &s);

La deuxième version de la fonction permet d'insérer une partie (paramètres insStart , num ) de la chaîne s à la position de départ spécifiée de la chaîne appelante :

String & insert (size_type start, const string &s, size_type insStart, size_type num);

Dans les fonctions ci-dessus :

  • s – une chaîne insérée dans la ligne appelante ;
  • start – position dans la ligne appelante à partir de laquelle la chaîne s est insérée ;
  • insStart – position dans la chaîne s à partir de laquelle l'insertion a lieu ;
  • num – le nombre de caractères dans la chaîne s qui sont insérés à partir de la position insStart.
chaîne s1 = "abcdef" ; chaîne s2 = "1234567890" ; s1.insert(3, s2); // s1 = "abc"+"1234567890"+"def"="abc1234567890def" s2.insert(2, s1, 1, 3); //s2 = "12bcd34567890"
11. Remplacement de caractères dans une chaîne. fonction remplacer(). Exemple

La fonction replace() remplace les caractères dans la chaîne appelante. La fonction dispose des options d'implémentation suivantes :

Chaîne &replace(size_type start, size_type num, const string &s); chaîne &replace (size_type start, size_type num, const string &s, size_type replStart, size_type replNum);

Dans la première implémentation, la chaîne appelante est remplacée par la chaîne s. Il est possible de spécifier la position (start) et le nombre de caractères (num) dans la ligne appelante qui doivent être remplacés par la chaîne s.

La deuxième version de la fonction replace() diffère de la première en ce qu'elle permet de remplacer seulement une partie de la chaîne s par la chaîne appelante. Dans ce cas, deux paramètres supplémentaires sont donnés : la position de replStart et le nombre de caractères dans la chaîne s, qui forment une sous-chaîne qui remplace la chaîne appelante.

Exemple. Démonstration de la fonction replace().

Chaîne s1 = "abcdef" ; chaîne s2 = "1234567890" ; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890" ; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890" ; s2.replace(5, 1, s1); //s2 = "12345abcdef7890" // remplacement de caractères, fonction replace() chaîne s1 = "abcdef" ; chaîne s2 = "1234567890" ; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890" ; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890" ; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" s2 = "1234567890" ; s2.replace(5, 1, s1, 2, 3); // s2 = "12345cde7890" s2 = "1234567890" ; s2.replace(4, 2, s1, 0, 4); //s2 = "1234abcd7890"

12. Suppression d'un nombre spécifié de caractères d'une chaîne. fonction effacer(). Exemple

Pour supprimer des caractères de la chaîne appelante, utilisez la fonction Eraser() :

Chaîne et effacement (size_type index=0, size_type num = npos) ;

  • index – index (position) à partir duquel vous souhaitez supprimer des caractères dans la ligne appelante ;
  • num – nombre de caractères supprimés.

Exemple.

Chaîne s = "01234567890" ; s.effacer(3, 5); // s = "012890" s = "01234567890" ; s.effacer(); //s = ""

13. Recherchez un caractère dans une chaîne. Fonctions Find() et rfind(). Exemples

Dans la classe string, la recherche d'une chaîne dans une sous-chaîne peut se faire de deux manières, qui diffèrent par le sens de la recherche :

  • en analysant la chaîne du début à la fin à l'aide de la fonction find() ;
  • en parcourant la chaîne de la fin au début avec la fonction rfind().

Le prototype de la fonction find() ressemble à ceci :

Size_type find(const string &s, size_type start = 0) const ;

  • s est la sous-chaîne recherchée dans la chaîne qui appelle cette fonction. La fonction recherche la première occurrence de la chaîne s. Si la sous-chaîne s est trouvée dans la chaîne qui a appelé cette fonction, alors la position de la première occurrence est renvoyée. Sinon, -1 est renvoyé ;

Le prototype de la fonction rfind() ressemble à ceci :

Size_type rfind(const string &s, size_type start = npos) const ;

  • s est la sous-chaîne recherchée dans la chaîne appelante. La recherche d'une sous-chaîne dans une chaîne s'effectue de la fin au début. Si la sous-chaîne s est trouvée dans la chaîne appelante, alors la fonction renvoie la position de la première occurrence. Sinon, la fonction renvoie -1 ;
  • npos – position du dernier caractère de la ligne appelante ;
  • start – la position à partir de laquelle la recherche est effectuée.

Exemple 1. Un fragment de code qui démontre le résultat de la fonction find()

// tapez la chaîne, fonction find() chaîne s1 = "01234567890" ; chaîne s2 = "345" ; chaîne s3 = "abcd" ; position int; pos = s1.find(s2); // pos = 3 pos = s1.find(s2, 1); // pos = 3 pos = s1.find("jklmn" , 0); // pos = -1 pos = s1.find(s3); // pos = -1 pos = s2.find(s1); // pos = -1

Exemple 2. Démonstration de la fonction rfind().

// type de chaîne, fonctions find() et rfind() chaîne s1 = "01234567890" ; chaîne s2 = "345" ; chaîne s3 = "abcd" ; chaîne s4 = "abcd---abcd" ; position int; pos = s1.rfind(s2); // pos = 3 pos = s1.rfind(s2, 12); // pos = 3 pos = s1.rfind(s2, 3); // pos = 3 pos = s1.rfind(s2, 2); // pos = -1 pos = s2.rfind(s1); // pos = -1 pos = s1.rfind(s3, 0); // pos = -1 // différence entre les fonctions find() et rfind() pos = s4.rfind(s3); // pos = 7 pos = s4.find(s3); // pos = 0
14. Comparaison de parties de chaînes. fonction comparer(). Exemple

Puisque le type de chaîne est une classe, vous pouvez utiliser l'opération pour comparer deux chaînes entre elles. ‘= =’ . Si les deux chaînes sont identiques, alors le résultat de la comparaison sera true . Sinon, le résultat de la comparaison sera faux .

Mais si vous devez comparer une partie d’une chaîne avec une autre, alors la fonction compare() est fournie à cet effet.

Prototype de la fonction compare() :

int comparer(size_type start, size_type num, const string &s) const ;
  • s – la chaîne comparée à la chaîne appelante ;
  • start – position (index) dans la chaîne s à partir de laquelle commence la visualisation des caractères de la chaîne à des fins de comparaison ;
  • num est le nombre de caractères de la chaîne s qui sont comparés à la chaîne appelante.

La fonction fonctionne comme suit. Si la chaîne appelante est inférieure à la chaîne s, alors la fonction renvoie -1 (une valeur négative). Si la chaîne appelante est supérieure à la chaîne s , la fonction renvoie 1 (une valeur positive). Si deux chaînes sont égales, la fonction renvoie 0.

Exemple. Démonstration de la fonction compare() :

// type de chaîne, fonction compare() chaîne s1 = "012345" ; chaîne s2 = "0123456789" ; intérêt; res = s1.compare(s2); // res = -1 res = s1.compare("33333" ); // res = -1 res = s1.compare("012345" ); // res = 0 res = s1.compare("345" ); // res = -1 res = s1.compare(0, 5, s2); // res = -1 res = s2.compare(0, 5, s1); // res = -1 res = s1.compare(0, 5, "012345" ); // res = -1 res = s2.compare(s1); // res = 1 res = s2.compare("456" ); // res = -1 res = s2.compare("000000" ); // res = 1
15. Réception d'une chaîne avec le caractère de fin de ligne '\0' (char * ). Fonction c_str() . Exemple

Pour obtenir une chaîne qui se termine par le caractère ‘\0’ La fonction c_str() est utilisée.

Prototype de fonction :

const char * c_str() const ;

La fonction est déclarée avec le modificateur const. Cela signifie que la fonction ne peut pas modifier l'objet appelant (chaîne).

Exemple 1. Conversion du type de chaîne en const char * .

// tapez la chaîne, fonction c_str() chaîne s = "abcdef" ; const char * ps; ps = s.c_str(); // ps = "abcdef"

Exemple 2.

Vous trouverez ci-dessous une démonstration de la conversion d'une chaîne de chaîne en type System::String pour l'afficher dans un contrôle Label.

Veuillez suspendre AdBlock sur ce site.

Donc, des chaînes en langage C. Il n’existe pas de type de données distinct pour eux, comme c’est le cas dans de nombreux autres langages de programmation. En C, une chaîne est un tableau de caractères. Pour marquer la fin d'une ligne, le caractère "\0" est utilisé, dont nous avons parlé dans la dernière partie de cette leçon. Il n’est en aucun cas affiché à l’écran, vous ne pourrez donc pas le regarder.

Création et initialisation d'une chaîne

Puisqu'une chaîne est un tableau de caractères, la déclaration et l'initialisation d'une chaîne sont similaires aux opérations similaires avec des tableaux unidimensionnels.

Le code suivant illustre les différentes manières d'initialiser des chaînes.

Inscription 1.

Car str;

char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r", "\0");

char str2 = "Bonjour !";

char str3 = "Bonjour !";

Fig.1 Déclaration et initialisation des chaînes

Sur la première ligne, nous déclarons simplement un tableau de dix caractères. Ce n'est même pas vraiment une ficelle, parce que... il lui manque le caractère nul \0 et il ne s'agit pour l'instant que d'un ensemble de caractères.

Deuxième ligne. Le moyen le plus simple d'initialiser directement. Nous déclarons chaque symbole séparément. L'essentiel ici est de ne pas oublier d'ajouter le caractère nul \0 .

La troisième ligne est analogue à la deuxième ligne. Faites attention à l'image. Parce que Il y a moins de caractères dans la ligne de droite qu'il n'y a d'éléments dans le tableau, les éléments restants seront remplis avec \0 .

Quatrième ligne. Comme vous pouvez le constater, aucune taille n’est spécifiée ici. Le programme le calculera automatiquement et créera un tableau de caractères de la longueur requise. Dans ce cas, le caractère nul \0 sera inséré en dernier.

Comment sortir une chaîne Développons le code ci-dessus en un programme à part entière qui affichera les lignes créées à l'écran.< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


Inscription 2.

#inclure

  • int main(void) ( char str; char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r", \0"); char str2 = "Bonjour!"; char str3 = "Bonjour!"; for(int i = 0; i
  • Fig.2 Différentes manières d'afficher une chaîne à l'écran
  • Comme vous pouvez le constater, il existe plusieurs manières de base d'afficher une chaîne à l'écran.

utilisez la fonction printf avec le spécificateur %s

utiliser la fonction put

utilisez la fonction fputs, en spécifiant le flux standard pour la sortie comme stdout comme deuxième paramètre.

La seule nuance concerne les fonctions puts et fputs. Notez que la fonction puts encapsule la sortie à la ligne suivante, mais pas la fonction fputs.

Comme vous pouvez le constater, la conclusion est assez simple.

Comment sortir une chaîne Saisie de chaînes

L'entrée de chaîne est un peu plus compliquée que la sortie. La manière la plus simple serait la suivante :
Inscription 3.
Vous avez remarqué le danger ? Dans le cas contraire, le compilateur vous en avertira gentiment. Le problème est que la fonction gets ne se termine que lorsque l'utilisateur appuie sur Entrée. Cela se heurte au fait que nous pouvons aller au-delà du tableau, dans notre cas, si plus de 20 caractères sont saisis.
À propos, les erreurs de dépassement de tampon étaient auparavant considérées comme le type de vulnérabilité le plus courant. Ils existent toujours, mais les utiliser pour pirater des programmes est devenu beaucoup plus difficile.

Alors qu'est-ce qu'on a ? Nous avons une tâche : écrire une chaîne dans un tableau de taille limitée. Autrement dit, nous devons d'une manière ou d'une autre contrôler le nombre de caractères saisis par l'utilisateur. Et ici la fonction fgets nous vient en aide :

Inscription 4.

Comment sortir une chaîne int main(void) ( char str; fgets(str, 10, stdin); puts(str); return 0; )

La fonction fgets prend trois arguments en entrée : la variable dans laquelle écrire la chaîne, la taille de la chaîne à écrire et le nom du flux à partir duquel obtenir les données à écrire dans la chaîne, dans ce cas stdin. Comme vous le savez déjà grâce à la leçon 3, stdin est le flux d'entrée standard généralement associé au clavier. Il n'est pas du tout nécessaire que les données proviennent du flux stdin ; à l'avenir, nous utiliserons également cette fonction pour lire les données des fichiers.

Si lors de l'exécution de ce programme nous entrons une chaîne de plus de 10 caractères, seulement 9 caractères depuis le début et un saut de ligne seront toujours écrits dans le tableau, fgets « coupera » la chaîne à la longueur requise.

Attention, la fonction fgets ne lit pas 10 caractères, mais 9 ! On s'en souvient, dans les chaînes le dernier caractère est réservé au caractère nul.

Vérifions ça. Exécutons le programme à partir de la dernière liste. Et entrez la ligne 1234567890. La ligne 123456789 s'affichera à l'écran.


Fig. 3 Exemple de la fonction fgets

Une question se pose. Où est passé le dixième personnage ? Et je répondrai. Il n'a pas disparu, il reste dans le flux d'entrée. Exécutez le programme suivant.

Inscription 5.

Comment sortir une chaîne int main(void) ( char str; fgets(str, 10, stdin); puts(str); int h = 99; printf("do %d\n", h); scanf("%d",&h) ; printf("après %d\n", h);

Voici le résultat de son travail.


Fig.4 Tampon stdin non vide

Laissez-moi vous expliquer ce qui s'est passé. Nous avons appelé la fonction fgets. Elle a ouvert le flux d'entrée et a attendu que nous saisissions les données. Nous avons entré 1234567890\n à partir du clavier (\n je veux dire en appuyant sur la touche Entrée). Cela est allé au flux d'entrée stdin. La fonction fgets, comme prévu, a pris les 9 premiers caractères 123456789 du flux d'entrée, leur a ajouté le caractère nul \0 et l'a écrit dans la chaîne str . Il reste encore 0\n dans le flux d’entrée.

Ensuite, nous déclarons la variable h. Nous affichons sa valeur à l'écran. Ensuite, nous appelons la fonction scanf. Ici, on s'attend à ce que nous puissions entrer quelque chose, mais... il y a 0\n suspendu dans le flux d'entrée, alors la fonction scanf perçoit cela comme notre entrée et écrit 0 dans la variable h. Ensuite, nous l'affichons à l'écran.

Bien entendu, ce n’est pas exactement le comportement auquel nous nous attendons. Pour résoudre ce problème, nous devons vider le tampon d'entrée après avoir lu l'entrée de l'utilisateur. Une fonction spéciale fflush est utilisée à cet effet. Il n'a qu'un seul paramètre : le flux qui doit être effacé.

Corrigeons le dernier exemple pour qu'il fonctionne de manière prévisible.

Inscription 6.

Comment sortir une chaîne int main(void) ( char str; fgets(str, 10, stdin); fflush(stdin); // efface le flux d'entrée puts(str); int h = 99; printf("do %d\n", h ) ; scanf("%d",&h); printf("après %d\n", h);

Le programme fonctionnera désormais comme il se doit.


Fig.4 Vider le tampon stdin avec la fonction fflush

Pour résumer, deux faits peuvent être notés. D'abord. Actuellement, la fonction gets n'est pas sûre à utiliser, il est donc recommandé d'utiliser la fonction fgets partout.

Deuxième. N'oubliez pas d'effacer le tampon d'entrée si vous utilisez la fonction fgets.

Ceci conclut la conversation sur la saisie de chaînes. Passons à autre chose.

Dans cette leçon, nous aborderons les chaînes de style C ; vous avez peut-être déjà vu ces chaînes sur notre site Web ou dans tout autre manuel. En fait, les chaînes C ne sont que des tableaux de caractères mais, avec leurs propres spécificités, nous savons donc toujours où se trouve la fin de la ligne. Dans cet article, nous examinerons plusieurs fonctions permettant de travailler avec des chaînes, par exemple, vous - copiez, concaténez, obtenez la longueur d'une chaîne.

Que sont les chaînes ?

Notez qu'en plus des chaînes de style C, qui sont essentiellement de simples tableaux, il existe également des chaînes littérales, telles que ce "literal" . En réalité, les chaînes et les littéraux sont simplement des ensembles de caractères situés côte à côte dans la mémoire de l'ordinateur. Mais il existe toujours une différence entre les tableaux et les littéraux : les littéraux ne peuvent pas être modifiés, et les chaînes le peuvent.

Toute fonction qui accepte une chaîne de style C peut également accepter un littéral comme paramètre. Il existe également certaines entités en C qui peuvent ressembler à des chaînes alors qu'en réalité elles ne le sont pas. Je parle maintenant de caractères, ils sont placés entre guillemets simples, voici un exemple - "a", comme vous pouvez le voir, ce n'est pas une chaîne. Un caractère peut, à un emplacement spécifique, être affecté à une chaîne, mais les caractères ne peuvent pas être traités comme une chaîne. Si vous vous en souvenez, les tableaux fonctionnent comme des pointeurs, donc si vous transmettez un seul caractère dans une chaîne, cela sera considéré comme une erreur.

D'après ce qui précède, vous devriez avoir réalisé que les chaînes sont des tableaux de caractères et que les chaînes littérales sont des mots entourés de guillemets doubles. Voici un autre exemple de littéral :

"C'est une chaîne statique"

Avez-vous oublié la spécificité des cordes, évoquée un peu plus haut ? Ainsi, les chaînes C doivent toujours se terminer par un caractère nul, littéralement « \0 ». Ainsi, pour déclarer une chaîne composée de 49 lettres, vous devez réserver une cellule supplémentaire pour le caractère nul :

Char maChaîne ;

Comme vous pouvez le voir dans l'exemple, la longueur du tableau est de 50 caractères, dont 49 seront une ligne et un, le dernier sera un caractère nul. Il est important de se rappeler qu’il doit toujours y avoir un caractère nul à la fin des lignes C, tout comme il y a un point à la fin de chaque phrase. Bien que le caractère nul ne soit pas affiché lors de la sortie de la chaîne, il occupe toujours de l'espace en mémoire. Donc techniquement, dans un tableau de cinquante éléments, vous ne pouvez stocker que 49 lettres, car le dernier caractère est nécessaire pour terminer la chaîne. De plus, les pointeurs peuvent également être utilisés comme chaîne. Si vous lisez l'article sur , vous pouvez faire quelque chose comme ceci :

Char *maChaîne; // pointeur de type char myString = malloc(sizeof(*myString) * 64); // allocation de mémoire

Dans cet exemple, nous avons alloué 64 emplacements mémoire pour le tableau myString. Pour libérer de la mémoire, utilisez la fonction free().

Gratuit(maChaîne);

Utiliser des chaînes

Les chaînes sont utiles lorsque vous devez effectuer diverses opérations sur des informations textuelles. Par exemple, si vous souhaitez que l'utilisateur entre un nom dans un programme, vous utiliserez une chaîne. L'utilisation de la fonction scanf() pour saisir une chaîne fonctionne, mais peut entraîner un débordement de tampon. Après tout, la chaîne d'entrée peut être plus grande que la taille de la chaîne tampon. Il existe plusieurs façons de résoudre ce problème, mais la plus simple consiste à utiliser , qui est déclaré dans le fichier d'en-tête. .

Lors de la lecture des entrées de l'utilisateur, il lira tous les caractères sauf le dernier. Après cela, un terminateur zéro sera placé à la fin de la ligne de lecture. La fonction fgets() lira les caractères jusqu'à ce que l'utilisateur appuie sur Entrée. Voyons un exemple d'utilisation de fgets() :

Comment sortir une chaîne int main() ( char myString; // longue chaîne printf("Entrez une longue chaîne : "); fgets(myString, 100, stdin); // lit la chaîne à partir du flux d'entrée printf("Vous avez entré la chaîne suivante : %s", maChaîne);

Le premier paramètre de fgets() est une chaîne, le deuxième paramètre est la taille de la chaîne et le troisième paramètre est un pointeur vers le flux de données d'entrée.

Résultat du programme :

<ВВОД>...

Comme vous pouvez le voir, à partir de la sortie du programme, un caractère de nouvelle ligne - "\n" - est entré dans la ligne d'entrée. Cela s'est produit parce que fgets() a compté la pression sur le bouton Entrée dans la chaîne myString et a terminé son travail. Cela signifie que vous devrez peut-être supprimer manuellement le caractère de nouvelle ligne. Une façon de procéder consiste à effectuer une énumération caractère par caractère. Modifions le programme et supprimons le caractère de nouvelle ligne :

Comment sortir une chaîne int main() ( char myString; // longue chaîne printf("Entrez une longue chaîne : "); fgets(myString, 100, stdin); // lit une chaîne à partir du flux d'entrée int i; for (i = 0; je< 100; i++) { if (myString[i] == "\n") { myString[i] = "\0"; break; } } printf("Вы ввели следующую строку: %s", myString); getchar(); }

Veuillez noter que si la chaîne d'entrée contient moins de 100 caractères, un caractère de nouvelle ligne sera également inclus dans la chaîne. Par conséquent, nous pouvons supprimer ce caractère en utilisant une simple force brute. Nous avons ajouté une boucle au programme dans laquelle nous parcourons les caractères de la chaîne, lignes 12-19. Et lorsque nous rencontrons un caractère de nouvelle ligne, nous le remplaçons par un caractère nul, ligne 16. Résultat du programme :

Saisissez une longue ligne : Le destin laisse sa marque Vous avez saisi la ligne suivante : Le destin laisse sa marque Pour fermer cette fenêtre, cliquez sur<ВВОД>...

C'est tout pour l'instant. Dans le prochain article, je vous parlerai des fonctions spéciales permettant de travailler avec des chaînes.

P.S. : Nous aimons tous regarder différents enregistrements vidéo, mais il arrive parfois qu'il ne soit pas toujours possible de lire certains formats de fichiers vidéo. Ainsi, vous pouvez résoudre ce problème en utilisant le programme - xilisoft converter Ultimate. Vous pouvez facilement convertir rapidement des vidéos d'un format à un autre. De plus, ce programme peut également convertir des fichiers audio et des images animées.

p»їUne agence de référencement digne de confiance en Inde peut augmenter les revenus des petites entreprises

80 % des utilisateurs effectuent des recherches sur Google et d'autres moteurs de recherche avant d'effectuer un achat et plus de 50 % des demandes générées via les moteurs de recherche sont converties. Ces deux statistiques prouvent l’importance de l’optimisation des moteurs de recherche. Il existe de nombreuses statistiques et faits qui démontrent clairement : toute petite, moyenne ou grande entreprise a besoin de services de référencement professionnels. Les petites entreprises et les startups sont souvent confrontées à des problèmes budgétaires. Ils peuvent faire appel à n’importe quelle agence de référencement indienne digne de confiance pour obtenir le meilleur service de référencement dans leur budget afin d’augmenter leurs revenus.
La recherche a un grand impact sur l’esprit des consommateurs. D'après les différentes statistiques partagées par les principaux experts en optimisation des moteurs de recherche sur divers sites Web autorisés tels que Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot, etc. Le SEO capte la majorité des leads. De plus, les leads issus des résultats de recherche organiques ont un taux de conversion plus élevé. Ces statistiques et le comportement des consommateurs montrent plus clairement que le meilleur service de référencement n'est pas un luxe, mais une nécessité pour toute entreprise.
Pour contourner la concurrence et augmenter la croissance de l'entreprise, chaque organisation doit utiliser les services d'optimisation des moteurs de recherche. Les grandes marques peuvent investir suffisamment d’argent pour le service expert SEO proposé par une grande société de référencement ou un spécialiste du référencement, mais les propriétaires de petites entreprises font souvent des compromis sur la qualité de ce service en raison d’un budget moindre. C’est un fait avéré que les petites entreprises et les startups finissent par abandonner les opportunités qui peuvent être créées avec le service de référencement professionnel ou par utiliser un service de référencement bon marché qui ne donne aucun résultat positif.
Les propriétaires de petites entreprises et les startups peuvent bénéficier de services de référencement professionnels, même avec un budget limité. La meilleure solution consiste à trouver une société de référencement digne de confiance basée en Inde. En Inde, de nombreux experts en référencement travaillent avec l'agence de marketing numérique et proposent les meilleurs services du secteur. Ils peuvent vous fournir les services de référencement requis dans votre budget. Les salaires peuvent être négociés avec une agence de référencement en Inde pour obtenir de meilleurs services à des tarifs inférieurs. Cependant, ne tombez pas dans le piège d’un service de référencement bon marché qui facture moins et promet de donner plus, car l’expertise a ses propres frais. Vous devez voir le portefeuille ou poser les questions appropriées avant de faire appel à une entreprise pour votre entreprise.
Les experts SEO en Inde maîtrisent les meilleures pratiques d’optimisation des moteurs de recherche. En outre, il existe des spécialistes du référencement en Inde, tels qu'Ash Vyas, qui se spécialisent dans la création de la meilleure stratégie d'optimisation des moteurs de recherche pour une entreprise dans le budget indiqué. Les professionnels du référencement créeront un plan clair et partageront également quels peuvent être les résultats attendus. De cette façon, vous pouvez être bien conscient de votre investissement et de vos rendements. Cela aide à prendre une meilleure décision commerciale.
Une bonne idée est de trouver et de contracter une société de référencement indienne digne de confiance qui offre les meilleurs services de référencement le plus rapidement possible. Vous pouvez également commencer avec un petit budget et des activités limitées pour commencer à indexer vos pages Web et à améliorer vos mots-clés dans les moteurs de recherche. N'attendez pas le moment idéal ou le jour où vous aurez des milliers de dollars à investir dans les meilleurs services de référencement. Commencer tôt vous aidera à obtenir des résultats plus rapides lorsque vous pourrez adopter une approche marketing agressive. Une société de référencement de confiance basée en Inde vous aidera à définir vos plans actuels et futurs pour obtenir de bons résultats. Des pages plus indexées, un classement amélioré et une marque crédible de votre entreprise grâce à des pratiques de référencement professionnelles continues doubleront les demandes de renseignements, les affaires et les revenus. Toute petite entreprise peut démarrer avec un investissement à deux chiffres dans les services de référencement professionnels. Il existe de nombreuses agences de référencement en Inde qui proposent un petit budget mais qui résultent de services d'optimisation des moteurs de recherche.

enquêtes d'exil

  • CraigWew

    12.04.2018

    p»їL'importance d'établir un rapport avec le client dans l'immobilier et les ventes générales

    L'importance d'établir une relation avec le client.
    L'établissement d'une relation avec un client doit être mérité et doit être abordé comme une partie intégrante du processus de vente.
    Afin d'amener un client et vous-même à établir une relation réelle, cela implique deux choses !
    Il faudra d’abord en être conscient et être présent ! Deuxièmement, vous devez comprendre que deux étapes différentes se produiront au cours de ce processus.
    A-Soyez là, qu'est-ce que ça veut dire ?
    o La plupart des gens n’écoutent pas vraiment les autres lorsqu’ils parlent. En général, ils sont tellement occupés à formuler leur prochaine réponse ou déclaration qu’ils ne peuvent pas vraiment écouter.
    o Si cela vous ressemble, être là signifie se taire et écouter !
    B-Quelle est la première étape ou étape initiale ?
    o En général, vous ne disposez que de quelques minutes pour vous établir dans l'esprit des clients comme quelqu'un avec qui ils souhaitent traiter.
    o En cas de doute, il est préférable de poser d'abord des questions qui les feront ressortir et parleront d'eux-mêmes.
    o Il est également toujours prudent d'apparaître comme un professionnel - je ne veux pas dire stoïque ou sec, mais comme quelqu'un qui sait ce qu'il fait, qui parle et qui a l'air à la hauteur.
    C-Autres étapes
    o Au fil du temps, à travers la conversation et les questions qu'ils vous poseront, vous établirez ou non vos capacités.
    o Sachez qu'ils vous mesureront probablement pendant un certain temps. La bonne nouvelle est qu'à un moment donné, si vous avez réussi à établir une relation, ils se détendront et vous pourrez tous deux vous concentrer sur la recherche ou la vente de la maison.
    Qu'est-ce qui peut m'aider à développer une relation ?
    o En essayant de comprendre les différents types de personnalité puis en posant et en posant les bonnes questions.
    o Si vous avez de bonnes relations (vous êtes sur la même longueur d'onde que le client), alors la vente est pratiquement terminée, il ne reste plus qu'à trouver la bonne maison ou à remplir les papiers d'annonce.
    Qu'en est-il des différentes personnalités
    o Puisqu'il ne s'agit pas d'un livre sur la psychiatrie, comprenons pour l'instant simplement deux types principaux.
    o Il existe des personnes introverties et extraverties.
    o Vous connaissez le type. Pensez à trois personnes que vous connaissez et qui correspondent à chaque classification.
    Qu’en est-il du langage corporel et des modèles de discours ?
    o S'ils parlent vite ou lentement, essayez d'imiter leurs schémas de parole.
    o S'ils parlent fort ou doucement, faites de même. Sont-ils penchés en avant ou en arrière ?
    o Inutile de dire qu'il existe de nombreux livres écrits sur ce sujet. Sachez simplement qu’il s’agit d’un facteur important, surtout lorsque vous êtes assis dans une salle de conférence ou chez quelqu’un pour discuter d’un accord de 400 000 $.
    Développer des relations est une compétence qui peut être apprise et améliorée.
    o Nous avons tous connu un vendeur qui nous a vendu quelque chose et pourtant nous n'avions pas l'impression d'être vendus. La raison en est qu'il ou elle vous a mis à l'aise là où vous lui aviez fait confiance.
    Comment développer des relations ?
    o Utilisez vos yeux et vos oreilles et posez des questions. Pour expliquer
    o Utiliser les yeux :
    o Regardez leur tenue vestimentaire, leur voiture, leurs effets personnels et je veux dire, regardez-les vraiment et déchiffrez ce que cela vous dit sur eux.
    o Utilisez les oreilles :
    o Écoutez ce qu'ils disent et posez des questions pour aller au fond de leur véritable MOTIVATION !
    Maintenant, au cours de toute cette conversation, vous découvrirez probablement une ou deux choses que vous avez en commun avec eux. (Famille, zones géographiques, pêche, etc.) Lorsque vous rencontrez un terrain d’entente, faites-leur savoir que vous êtes familier, puis prenez une minute pour en discuter avec eux.
    Quel est le but ?
    o Une fois qu'ils vous acceptent comme l'un d'entre eux, vous êtes en mesure de vraiment vivre une grande expérience de la vente puisque vous travaillez maintenant ensemble puis en équipe - vous n'êtes plus le vendeur, vous êtes maintenant dans un poste de conseil. .
    o N'oubliez pas que le client vous permettra ou non d'entrer dans son monde. Si vous comprenez cela et travaillez vraiment dur pour devenir empathique avec lui, vous pouvez gagner une position de confiance. Dans la plupart des cas, vous les verrez se détendre (langage corporel) lorsque cela se produit, sur le chemin.
    o Pour illustrer cela, avez-vous déjà prononcé un discours et remarqué que lorsque vous vous connectez enfin avec un membre de l'auditoire, celui-ci hoche la tête en signe d'approbation. Ces choses peuvent toutes sembler banales, mais elles ne le sont pas.
    En conclusion, si vous parvenez à gagner la confiance d’un client, vendre un produit ou un service est beaucoup plus facile et l’expérience peut être agréable pour toutes les personnes impliquées.
    N'oubliez jamais qu'un Win/Win est la meilleure situation.

Déclaration de chaînes

Une chaîne en langage C est un tableau unidimensionnel de caractères dont le dernier élément est le caractère de fin de ligne - zéro (une chaîne terminée par zéro, c'est-à-dire une chaîne terminée par NULL).

Déclarer une variable de type chaîne en langage C est possible de trois manières, dont deux initialisent la chaîne au moment de la déclaration.

Première façon :

Déclarations de tableaux de caractères (n'oubliez pas d'ajouter un espace pour le null final) :

Caractères ;

Deuxième manière :

Attribuez une valeur initiale à la variable chaîne (dans ce cas, le compilateur peut calculer lui-même la longueur de la chaîne) :

Char s = "Exemple d'initialisation de chaîne";

À droite du signe d'affectation se trouve une constante de chaîne. Un zéro (« \0 ») est automatiquement ajouté à la fin de la ligne. Les constantes de chaîne de caractères sont placées dans une classe mémoire statique.

Troisième manière :

Indication implicite qu'un tableau est utilisé. À gauche du signe d'affectation se trouve un pointeur vers le symbole :

Char *s="Deuxième option d'initialisation";

La variable s sera un pointeur vers l'emplacement dans la RAM où se trouve la constante de chaîne. Un piège potentiel dans cette forme de notation est qu'un pointeur vers un caractère est souvent appelé chaîne. L'entrée ci-dessous n'est qu'un pointeur vers un caractère, car aucun espace n'est prévu pour la chaîne :

Caractères *s ;

Saisie d'une chaîne à partir d'un périphérique d'entrée standard (clavier)

Il existe un ensemble de fonctions pour travailler avec des chaînes. Pour la saisie à partir d'un périphérique d'entrée standard (clavier), les fonctions de bibliothèque du module d'entrée/sortie standard sont le plus souvent utilisées : scanf Et obtient.

Pour saisir une chaîne à l'aide de la fonction scanf, utilise le format « %s» , et notez que le signe d'adresse n'est pas utilisé avant l'identifiant de ligne « & » , puisqu'un tableau unidimensionnel est déjà représenté par un pointeur vers son début :

Scanf("%s", s);

Fonction obtient() lit les caractères jusqu'à ce qu'il atteigne un caractère de nouvelle ligne. La fonction accepte tous les caractères jusqu'au caractère de nouvelle ligne, mais ne l'inclut pas. Un zéro final (« \0 ») est ajouté à la fin de la ligne. Fonction obtient() place la séquence de caractères lue au clavier dans un paramètre chaîne et renvoie un pointeur vers cette chaîne (si l'opération a réussi), ou NULL (en cas d'erreur). Dans l'exemple ci-dessous, si l'opération se déroule avec succès, deux lignes identiques s'afficheront à l'écran :

Comment sortir une chaîne int main() ( char s; char *p; p=gets(s); printf(" \n La chaîne %s a été saisie.",s); if (p) printf(" \n La chaîne %s a été saisie entré.", p); return 0; )

Au passage, notez que la fonction gets est souvent utilisée pour saisir n'importe quelle donnée du clavier sous forme de chaîne dans le but d'une conversion ultérieure par la fonction sscanf au format souhaité ou pour une analyse préliminaire des données d'entrée, par exemple :

Comment sortir une chaîne #inclure #inclure int main() ( char s; int x, err; do ( printf(" \n Entrez un entier -> "); gets(s); err=sscanf(s, "%d",&x); if (err !=1) printf(" \n Erreur de saisie. " ) while (err!=1); printf("\n Entier entré -> %d", x )

Impression de chaînes sur la sortie standard (écran du moniteur)

Pour envoyer des chaînes vers le périphérique de sortie standard (écran de moniteur), vous pouvez utiliser deux fonctions imprimer Et met. La fonction printf reçoit "%s" comme format. L'avantage d'utiliser cette fonction est qu'en plus d'une chaîne, vous pouvez immédiatement afficher des données d'autres types. Fonctionnalité met est qu'une fois qu'une ligne est imprimée, elle passe automatiquement à la ligne suivante.

Fonctions pour travailler avec des chaînes

Pour convertir des chaînes en langage C, la bibliothèque de chaînes est fournie. Chaque fonction possède son propre format d'enregistrement (prototype).

Les fonctions les plus utilisées sont abordées dans cet article. - lire

Exemple de programmes (liste) travaillant avec des chaînes



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :