Existe-t-il un moyen en C++ de vérifier si une chaîne de caractères commence par une certaine chaîne (plus petite que l'originale) ? Comme on peut le faire en Java
bigString.startswith(smallString);
Existe-t-il un moyen en C++ de vérifier si une chaîne de caractères commence par une certaine chaîne (plus petite que l'originale) ? Comme on peut le faire en Java
bigString.startswith(smallString);
Vous pouvez le faire avec string::compare()
qui offre diverses options pour comparer tout ou partie de deux chaînes de caractères. Cette version compare smallString
avec le préfixe de taille appropriée de bigString
(et fonctionne correctement si bigString
est plus courte que smallString
) :
bigString.compare(0, smallString.length(), smallString) == 0
J'ai tendance à emballer tout cela dans une fonction libre appelée startsWith()
car sinon, cela peut sembler un peu mystérieux.
UPDATE : Le C++20 ajoute nouveau starts_with
y ends_with
de sorte que vous pourrez enfin écrire seulement bigString.starts_with(smallString)
.
Les approches utilisant string::find()
o string::substr()
ne sont pas optimales car elles font une copie de votre chaîne de caractères, ou recherchent plus que des correspondances au début de la chaîne. Ce n'est peut-être pas un problème dans votre cas, mais si c'est le cas, vous pouvez utiliser la fonction std::equal
algorithme. N'oubliez pas de vérifier que la "botte de foin" est au moins aussi longue que l'"aiguille".
#include <string>
using namespace std;
bool startsWith(const string& haystack, const string& needle) {
return needle.length() <= haystack.length()
&& equal(needle.begin(), needle.end(), haystack.begin());
}
La bonne solution, comme toujours, vient de Boost : boost::algorithm::starts_with
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.