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:

date
page
Fonctions de chaîne de manutention en C ++ (Si-stroki)
évaluation
51star1star1star1star1star

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

  1. Il milyard pièces, vous avez peut-être manqué, mais nous décrivons en détail l'évidence…

    >> programme, que l'extrémité d'une ligne, ajoute la deuxième ligne. En d'autres termes - il combine deux lignes.

    Et ainsi, et, en d'autres termes, – divers plans, mais l'essence est pas clair.
    Je 2 char * string pour alloué chaque 256 octet.
    Le premier enregistrement “Bonjour”, deuxième “monde”.
    Je les ai unis. Combien d'octets je devais? 512 ou 10?

    Réponse et aller plus loin dans le texte :).

    1. Vladimir, pointeurs sujet dans cet article ne se lève pas. Si nous parlons de tableaux de caractères (Si-strokah) taille 256 octets,, après concaténation de chaîne “Bonjour” et ” monde”, ligne dans laquelle les personnages sont finis écrire monde, prendra 256 octet, ainsi que préalablement à la fusion.

      chaîne strWorld prend lignée cellulaire strHello, suivant les caractères bonjour (strWorld premier caractère de la chaîne “zatret” \0 après le symbole 'o’ ligne strHello).

      Travailler avec des pointeurs vers des chaînes, bien sûr, meilleure quantité perevydelyat de mémoire nécessaire pour stocker des chaînes de caractères, et non pas occuper trop d'espace. Il va tourner, il doit 12 octet pour “Bonjour le monde”. Tout est en ordre – et nous arrivons à cette :)

      P.S. commentaires,code et une explication est pas pour vous, et pour les débutants, qui va lire quelque chose sur quoi nous parlons

      1. La question est vraiment très intéressant! Je ne l'ai jamais eu à y penser. À première vue,, dans cet enregistrement est pas étrange. Mais il ne fonctionne pas bien! :) états d'erreur “Le tampon est trop petit”. Un de mes amis (Vitali) Je l'ai dit à la question: “documentation écrite, que “si les objets fonctionnels se chevauchent, son comportement est pas défini.” le programmeur qui écrit alors aspiré dans le vide )) ” Eh bien, même de façon continue: “Il monte un caractère. Les recherches de fonction \0 la première ligne, découvertes, caractère par caractère et commence à coller la deuxième rangée. MAIS! elle colle jusqu'à ce qu'il trouve \0 qui n'existe!
        Vova, Nous sommes reconnaissants, Si vous aussi, vous nous répondre à ce sujet.

  2. Eh bien, camarade droit dit, copies La première ligne les caractères de son commencement à sa fin, pousse donc infiniment.

    La crinière est écrit:
    Les lignes ne peuvent pas se chevaucher, et dest doit avoir assez d'espace pour contenir le résultat.

    En réalité, il y a un débordement de tampon, mais purement par hasard il pourrait fonctionner (l'erreur ne vient pas), mais le programme est modifié en quelque sorte imprévisible.

    Dokapalis I, que la description de cette fonction prend des lignes de mana 6. juste, effacer tout à la fois (et environ des tampons suffisamment grands, et sur l'intersection des lignes). Vous écrivez cent fois la même chose avec des mots différents, Je ne sais pas pourquoi xD.

    >> P.S. commentaires,code et une explication est pas pour vous, et pour les débutants, qui va lire quelque chose sur quoi nous parlons.

    Vous écrivez un article sur les conventions de codage. Il semble que certains d'entre eux indique le nombre optimal de commentaires dans le code. Personne n'écrit à chaque ligne.

    A Ë en non indeksiruetsâ Poiskovik (ou je me trompe?), si juste plus rentable de mettre une description du code après le code, non à l'intérieur.

    Vous écrivez, “fonctions pour travailler avec des chaînes en C ++”, en fait, ils étaient une fois dans , mais en C ++ il , et vieux (“sishnye”) chaîne passée en (ici là et décrit ces sortes strcat, … ). à savoir. Je lis le titre et attends à lire sur std::chaîne, et ici… (Ils me séduisait xD).

    1. donc pas de commentaires dans le code pour chaque ligne )) il y a seulement quelques morceaux. P.S. Il a été écrit pour, que vous ne pensez pas si je vous ai dit tout cela expliquer. Vous savez ce que – il est clair ))
      En ce qui concerne le titre. Par nom peut certainement pinailler… Seulement si l'article était sur la chaîne, il sera également pas le nom “fonctions pour travailler avec des chaînes en C ++”. plutôt – Méthodes de travail avec des objets de chaîne des chaînes de classe.
      Comment appelez-vous cet article? Peut-être que la vérité est préférable de renommer.

  3. Mais je lis un article sur…

    A propos de strcpy vous avez apporté quelque chose de type analogique, à savoir. essayé strcpy balafre propres mains, Je comprends bien?

      1. Pas exactement xD.

        La crinière (norme semble trop) Il dit que les lignes ne se chevauchent pas. En gcc il semble fonctionner sur des lignes qui se chevauchent fines, mais cette norme peut être un comportement indéfini, et des moyens dans un autre compilateur (une autre version du même compilateur) il peut se casser.

        Je pense que, que sur ce sujet mieux décrire les erreurs typiques (с strcpy – Ce débordement de tampon) et les moyens de lutter contre la.

        Je l'avais pensé artisanat melkosofta, strcpy_s de type. Si vous écrivez du code dans Visual Studio, alors vous entendrez et stopudovo fenêtre d'avertissement que, strcpy qui doit être remplacé par une version sécurisée – strcpy_s. Voilà de cette chose que vous pouvez écrire IMHO.
        Regardez ici

      2. Eh bien à propos de strcpy_s et strcat_s – Ce fut ma question pour vous )) Il se trouve maintenant, que la question elle-même demandé.

        Intéressant vous avez une façon de communiquer:
        – juste.
        – pas exactement.

        + Mes questions sont les mêmes, et je demande…

        Vova. Je propose de bien communiquer, si nous nous respectons mutuellement )

  4. mais un article entier est devenu Godnev, Code formaté moins uniformément :). Plus fun est pas assez d'exemples, que, si…

    Ecrire plus :)

      1. >> Vova. Je propose de bien communiquer, si nous nous respectons mutuellement )

        “Sur vous” que, si? )

        À propos du nom plus correct entrées ne savent rien. Je ne suis pas un fan de mikrostatey, Je voudrais écrire sous ce nom, et environ C-string, une chaîne de. Je suis venu avec quelques exemples, qui aurait apporté un tas de fonctions de chaîne, et par les fonctions elles-mêmes ont écrit un très court (otnostrochnыe) commentaires, Je les ai mis sur la table. Posté à environ buffer overflow – il suffit de faire une erreur courante lorsque l'on travaille avec des cordes, sécurité-fonctions de Microsoft et un autre exemple du type… “étant donné un tableau de chaînes, il est nécessaire de fusionner en une seule grande chaîne” – il serait arrêté sur l'évaluation de la complexité asymptotique – Exemple magnifique et l'évaluation de la complexité ne réside pas sur la surface.

        Je ne tellement pose pas de questions, beaucoup suggèrent des sujets pour les articles suivants (thèses ou finis en cours).

  5. A propos de l'exemple de la fusion expliquera le tableau de chaînes.
    est un artefact de strcat, ici vous avez raison déjà écrit, que, avant de commencer à fusionner, il remplace le symbole . Mais à son zanmenit, il est nécessaire de trouver. Mais comment le trouver, Si la taille de la chaîne ne sait pas? – itérer séquentiellement tous les postes.

    Si vous fusionnez 2 lignes – la première longueur N, deuxième – M, il sera exécuté N + opérations M, tk. premières opérations N pour trouver , opérations de fusions et d'enregistrer le contenu de la deuxième rangée dans la première.

    bien que, beaucoup de programmeurs, ne pas regarder dans la documentation des opérations prévu M, tk. oublier la recherche.

    respectivement, si nous avons un réseau de lignes K, et il en sera, que la première ligne est trop longue, et le reste sont très courts, la complexité de l'algorithme est pas très faible (bien que, parce que nous ajoutons une courte chaîne à une longue), et à proximité de K * seulement, где Seulement – la somme des longueurs de toutes les cordes. En bref, au lieu de la complexité linéaire quadratique.

    Mais en std::cordage très différent, bien que la complexité reste le même (sur, parce qu'il ya des choses telles que memcpy, et le vecteur peuvent se développer dans les jaillissements) bien que, que les lignes de taille connue. penser pourquoi, MB dessiner un nouvel article.

    1. Un couple de lignes dans la protection de l'auteur!
      Vladimir, Je fais appel à vous “À propos du nom plus correct entrées ne savent rien” – il n'y a rien à trouver à redire avec le nom inventé, et il se trouve – Je n'aime pas, mais je ne sais pas comment mieux… “Je voudrais écrire…”, “Je suis venu à…”, ” amené à…” et t. ré. etc. Mais je ne vous écris pas, pas inventé, pas apporté… (Si je suis trop catégorique et profondément erronée – part, Soyez gentil avec un lien vers votre article sur le même sujet). Et quelqu'un a écrit, Je suis venu, J'ai. Et vous êtes maintenant sidiete “tous si intelligents” et de critiquer. J'aurais fait beaucoup de bien…. Alors que quelqu'un ramasse et marques! J'aime l'article et est des exemples très populaires et compréhensibles. La présentation beaucoup plus clair que mon professeur actuel à l'université en C ++ (Un autre compliment à l'auteur). Un grand merci à la maîtrise de ce site plutôt que des études et des résumés (mais malheureusement). auteur, Nous vous remercions de votre travail! Ne vous arrêtez pas là, Vos efforts profitent aux populations!

  6. le premier exemple de comparaison de 2 lignes, je ne l'ai pas compilé sans
    #Exemple comprennent, mais on ne précise pas.

    1. Les exemples dans la littérature (et beaucoup plus complexe, que montré) souvent #include requis non spécifié – considéré, vous entrerez dans leur propre dans la quantité requise.

      Plus précisément, le, qui nécessitait #include, peuvent varier en fonction du système d'exploitation et le compilateur … mais pas la totalité (heureusement) MS VisualStudio vous aimez.

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>