Fonctions de chaîne de manutention en C ++




функции strlen (), strcat (), strcpy (), strcmp () в C++

après, que nous connaissons chaînes et des tableaux de caractères en C ++, examiner les fonctions les plus courantes pour travailler avec eux. La leçon sera entièrement construite dans la pratique. Nous allons écrire leurs propres programmes-analogues pour le traitement des lignes et parallèlement à l'utilisation des fonctions de la bibliothèque standard cstring (string.h – dans les anciennes versions). Donc, vous êtes sur le point de se présenter, comment ils fonctionnent. Les fonctions de la bibliothèque standard cstring sont:

  • strlen() – calcule la longueur de la chaîne (nombre de caractères à l'exclusion \0);
  • strcat() – Il combine les chaînes;
  • strcpy() – copie les symboles d'une ligne à l'autre;
  • strcmp() – compare deux chaînes ensemble .

Il est certainement pas toutes les fonctionnalités, seules celles, qui est recouverte à l'article.

strlen() (la longueur des mots – longueur)

Notre programme, qui calcule le nombre de caractères par ligne:

Pour calculer les caractères d'une chaîne d'une durée indéterminée (que l'utilisateur pénètre), nous avons utilisé le cycle tandis que – lignes 13 – 17. Il passe par toutes les cellules du réseau (tous les caractères de la chaîne) alternativement, en commençant par zéro. Lorsque, à un cycle de l'étape pour répondre Box ourStr [amountOfSymbol], qui stocke le symbole \0, symboles de pause du cycle de buste et augmenter le compteur amountOfSymbol.

Ainsi, le code ressemblera, le remplacement de notre section de code sur la fonction strlen():

Comme vous pouvez le voir, Ce code de. Il n'a pas eu à déclarer des variables supplémentaires et utiliser une boucle. Le flux de sortie cout nous sommes passés dans la chaîne de fonction – strlen(ourStr). Il est suggéré que la longueur de la ligne de retour et le numéro de programme. Comme dans le code analogique précédent, symbole \0 pas inclus dans le nombre total de caractères.

Le résultat est le programme dans le premier et le second semblable:

функция strlen () в C++

strcat() (concaténation de mots – composé)

programme, que l'extrémité d'une ligne, ajoute la deuxième ligne. en d'autres termes, – Il combine deux lignes.

Selon les commentaires dans le code devrait être tout clair. Ci-dessous, nous écrivons un programme pour effectuer la même action, mais en utilisant le strcat(). Dans cette fonction, nous allons donner deux arguments (deux lignes) – strcat(someText1, someText2); . La fonction ajoute une chaîne someText2 à la ligne someText1. Dans le même symbole ' 0' à la fin someText1 Il remplace le premier caractère someText2. Elle ajoute également une finale ' 0'

La mise en œuvre de l'union de deux lignes, En utilisant la fonction standard, Je pris une ligne de code dans le programme – 14-rangée.

résultat:

strcat c++, strcat_s c++

Que doit prêter attention à la première et deuxième code – la taille du premier caractère de la matrice doit être suffisante pour que la deuxième rangée de caractères locaux. Si la taille est insuffisante – peut se produire la fin du programme anormale, depuis l'enregistrement de la ligne de mémoire, qui occupe la première rangée. par exemple:

Dans ce cas,, strokovaya constante “Apprendre C ++ c nous!” Il ne peut pas être écrit dans le tableau someText1. Comme il n'y a pas assez d'espace, pour de telles opérations.

Si vous utilisez une version récente de Microsoft Visual Studio environnement de développement, vous pouvez rencontrer l'erreur suivante:: “Erreur C4996: 'strcat’: Cette fonction ou variable peuvent être dangereux. Pensez à utiliser strcat_s au lieu. Pour désactiver deprecation, utilisation _CRT_SECURE_NO_WARNINGS. Voir l'aide en ligne pour plus de détails.” En effet,, qui a développé une nouvelle version, plus sûr de la fonction strcat – il strcat_s. Elle se soucie, afin qu'il n'y ait débordement de tampon (tableau de caractères, qui a produit enregistrement deuxième ligne). Environnement vous permet d'utiliser une nouvelle fonction, au lieu du jour. En savoir plus sur ce qui peut être sur le site msdn. Cette erreur peut se produire, si vous utilisez la fonction strcpy, qui sera discuté ci-dessous.

strcpy() (copie Slovénie – copier)

A vendre jusqu'à une rangée et l'insérer à la place d'une autre rangée.

Appliquer la bibliothèque de fonction standard cstring:

Essayez de compiler et d'abord, et un second programme. Vous verrez ce résultat:

strcpy c ++

strcmp() (Slovénie comparer – comparaison)

Cette fonction est conçue de sorte: Elle compare le caractère de deux C-string par le caractère. Si les chaînes sont identiques (et les symboles et leur nombre) – la fonction renvoie au numéro de programme 0. Si la première ligne est plus longue qu'une seconde – renvoie au numéro de programme 1, et si moins, la -1. nombre -1 à l'époque, lorsque la longueur des lignes est, mais les lignes des caractères ne correspondent pas.

strcmp c ++ programme avec strcmp():

strcmp c ++

Partager sur les réseaux sociaux nos articles avec vos amis, qui apprennent également les bases de la programmation en C ++.

Sur notre site a déjà la possibilité de souscrire, recevoir une notification des nouveaux articles. Pour vous abonner – entrez votre e-mail ci-dessous.

Bulletin de nouvelles leçons sur la programmation:

Fonctions de chaîne de manutention en C ++
4.4 (88.57%) 14 votes

36 réflexions sur "Fonctions de chaîne de manutention en C ++

  1. Bonjour. qui se donne de grands airs, pourquoi, lorsque combiner deux lignes et le second groupe de caractères longueur de tableau spécifié, par exemple

    , puis la deuxième matrice ne soit pas combiné avec le premier?

    1. il est pas vrai.
      Vous avez le résultat peut être simplement placé dans someText1[].
      Augmenter la taille – ce que gourmand?
      par exemple: someText1[ 200 ]

  2. expliquer, s'il vous plaît, pourquoi, en association avec des lignes Exemple
    int = count1 0; // pour la cellule dans laquelle l'index est stocké « 0’ première rangée
    tandis que (someText1[count1] != 0)
    nous écrivons “someText1[count1] != 0” pas “someText1[count1] != « 0′”?
    Il semble être à la recherche d'un élément d'une extrémité de chaîne de caractères « 0 »? Qu'est-ce que le zéro?
    Bien que je dois dire, J'ai un Koudblokse travaille avec zéro…

    1. Comme le dossier « 0’ Encore une fois, et des moyens: octet, valeur numérique enregistré dans lequel égal 0.
      Ces dossiers sont équivalents.

  3. Cher auteur!
    À mon avis, dans les premières rangées exemple de comparaison directive omis #include préprocesseur

  4. Le couple ne peut pas comprendre
    omble xsmibol[2] = {wParam, « ​​0 »};
    Il fonctionne comme ceci
    ————————–
    Et cela ne fonctionne pas:
    omble xsmibol[2];
    xsmibol = {wParam, « ​​0 »};

    il parle 17 27 C:\Utilisateurs 1 Documents main1.cpp [Attention] listes d'étendues initialiseur disponible uniquement avec std = c ++ 11 ou -std = gnu ++ 11
    17 12 C:\Utilisateurs 1 Documents main1.cpp [Erreur] affecter à un réseau à partir d'une liste d'initialisation
    37 14 C:\Utilisateurs 1 Documents main1.cpp [Erreur] L'expression primaire attendue avant «)’ jeton

    Qu'est-ce que je fais mal ?

    1. Je pense que, Dans le premier cas – omble xsmibol[2] = {wParam, « ​​0 »}; le compilateur calcule la taille de la chaîne et se substitue à un lieu 2. Dans le second cas -char xsmibol[2];
      xsmibol = {wParam, « ​​0 »}; il ne peut pas fixer la taille de la chaîne.

    2. Parce que le tableau est permis initialisation une liste de valeurs ({…,…}), mais pas le droit affectation. Cette règles de syntaxe C ++, et il ne dépend pas type éléments de réseau – que ce soit un tableau de caractères (lignes), ou un tableau d'int, flotter tableau, etc..

      P.S. Cette limitation est en partie réduit en C ++ standard 11 (2011ville), mais il est nécessaire de spécifier les options de compilation.

  5. bonjour. J'étudie vos leçons et tâches.
    Mais noté une différence dans les résultats de la fonction strcmp.
    Dans le cas où le nombre de caractères sur deux lignes , mais les différences entre ces personnages résultat 1 ou -1 dépend de l'ordre dans lequel ces symboles. Si la première ligne contient des symboles , sont dans l'ordre alphabétique que votre deuxième ligne du résultat 1, si au contraire le résultat -1. par exemple: comparaison de chaînes “asdf” et “BSDF”donnera 1, une comparaison de chaînes “BSDF” et “asdf” donnera -1. Et aussi avec des chiffres. “1234” et “2234” donnera 1, et “2234” et “1234” donnera -1.

      1. tout naturellement – opération de comparaison n'est pas commutative, il ne permet pas la permutation des opérandes. La même chose est vraie pour les valeurs numériques et en les comparant (ce qui est compréhensible): 2 > 1 – il est vrai, mais 1 > 2 – est faux.

  6. Bonjour!
    dire, s'il vous plaît, pourquoi, dans l'exemple de la combinaison de deux lignes en utilisant les cycles, nous signalerons la dimension du premier tableau de chaînes?:

    omble someText1[64] = “Сайт purecodecpp.com!”;
    omble someText2[] = “Apprendre C ++ c nous!”;

    Et si vous laissez une dimension vide, le compilateur permettant de calculer cette valeur indépendamment, le texte consolidé est affiché après la compilation dans la console, plus un certain caractère aléatoire(complètement au hasard), alors la fenêtre d'erreur apparaît:

    (par exemple, dans ce cas, Il ajoute un point d'interrogation:
    someText1: Сайт purecodecpp.com!Apprendre C ++ c nous!?
    au lieu de – someText1: Сайт purecodecpp.com!Apprendre C ++ c nous!

    1. Parce que pointant someText1[64] vous rezerviruete par ligne 64 octets de mémoire, bien que la ligne est écrit dans le « Site purecodecpp.com!», limitée ' 0', Il faut octets beaucoup moins (strlen(someText1)).
      Et quand vous écrivez someText1[], compilateur calcule et réserves pour cette ligne ne pas 64 octet, et juste assez, au besoin pour tenir compte de la chaîne de caractères spécifiée + caractère de fin « 0 ».

      Dès que vous essayez d'effectuer dans la queue someText2 annexant someText1, dans le 1er cas se produit ici jusqu'à chez les 64 octets réservés. Et dans le 2ème cas, vous commencez immédiatement à écrire frontière La mémoire allouée pour someText1, et le résultat sera imprévisible – il rugueux erreur.

  7. Bonjour, Je réécrit le code de programme de votre premier, lancé – essayer… Je vous écris pour vérifier un mot, pour vérifier si la réponse correcte donnera, etc., mot: “été”, Il se compose de 4 caractères, par écrit non utilisé non des espaces, sans guillemets, Seule la lettre… et les résultats du programme:
    “rangée “été” Il se compose de 8 caractères!”
    …8-moi? pourquoi? :) est-ce pas 4 symboles? De même, avec les deux mots:
    “matin d'été”
    “rangée “matin d'été” Il se compose de 17 caractères!”
    chaque lettre, considéré comme le compilateur 2 symboles, écart – 1 symbole. Mais chaque personnage doit être compté comme 1… ?

Laisser un commentaire

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *