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()
?
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:
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.
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.
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!
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()
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.
Si vous voulez vraiment, vraiment, utiliser strlen (), alors
cout << strlen(str.c_str()) << endl;
sinon, l'utilisation de .length () est plus conforme à C++.
Manuellement:
int strlen(string s)
{
int len = 0;
while (s[len])
len++;
return len;
}
#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!