web-dev-qa-db-fra.com

Comment obtenir la longueur d'une chaîne en utilisant la fonction strlen

J'ai le code suivant qui obtient et imprime une chaîne.

#include<iostream>
#include<conio.h>
#include<string>
using namespace std;

int main()
{
    string str;
    cout << "Enter a string: ";
    getline(cin, str);
    cout << str;
    getch();
    return 0;
}

Mais comment compter le nombre de caractères dans cette chaîne en utilisant la fonction strlen()?

34
Akash Sharma

Pour les chaînes C++, il n'y a aucune raison d'utiliser strlen. Il suffit d'utiliser string::length:

cout << str.length() << endl;

Vous devriez fortement préférer ceci à strlen(str.c_str()) pour les raisons suivantes:

  1. Clarté: Les fonctions membres length() (ou size()) donnent sans ambiguïté la longueur de la chaîne. Bien qu'il soit possible de comprendre ce que fait strlen(str.c_str()), cela force le lecteur à faire une pause un instant.

  2. Efficacité: length() et size() dans le temps O (1), tandis que strlen(str.c_str()) prend (n) fois pour trouver la fin de la chaîne.

  3. Style: Il est bon de préférer les versions C++ des fonctions aux versions C, sauf indication contraire. C'est pourquoi, par exemple, il est généralement préférable d'utiliser std::sort sur qsort ou std::lower_bound sur bsearch, à moins que d'autres facteurs, susceptibles d'avoir une incidence sur les performances, ne soient pris en compte.

J'espère que cela t'aides!

97
templatetypedef

La fonction strlen indique le nombre de caractères précédant \0 et son utilisation pour std::string peut indiquer une longueur incorrecte.

strlen(str.c_str()); // It may return wrong length.

En C++, une chaîne peut contenir \0 dans les caractères, mais les chaînes C-style-terminées par un zéro ne peuvent que se terminer. Si le std::string a un \0 avant le dernier caractère, strlen indique une longueur inférieure à la longueur réelle.

Essayez d'utiliser .length() ou .size() , je préfère le second, car un autre conteneur standard l'a.

str.size()
6
deepmax

Utilisez std::string::size ou std::string::length (les deux sont identiques).

Si vous insistez pour utiliser strlen, vous pouvez:

int size = strlen( str.c_str() );

notez l'utilisation de std::string::c_str, qui renvoie const char*.

MAISstrlen compte jusqu'à atteindre \0 char et std::string peut stocker ces caractères. En d'autres termes, strlen pourrait parfois mentir pour la taille.

2
Kiril Kirov

Si vous voulez vraiment, vraiment, utiliser strlen (), alors

cout << strlen(str.c_str()) << endl;

sinon, l'utilisation de .length () est plus conforme à C++.

1
KeithSmith

Manuellement:

int strlen(string s)
{
    int len = 0;

    while (s[len])
        len++;

    return len;
}
0
user2972135
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main()

{
    char str[80];

    int i;

    cout<<"\n enter string:";

    cin.getline(str,80);

    int n=strlen(str);

    cout<<"\n lenght is:"<<n;

    getch();

    return 0;

}

Ceci est le programme si vous voulez utiliser strlen. J'espère que cela t'aides!

0
Orange Blossom