Existe-t-il un moyen de créer une chaîne de disons 256 caractères lors de l'initialisation avec c ++?
Une partie de mon devoir m'oblige à "1. Créer une chaîne de 256 caractères. Utilisez des répétitions de votre prénom".
Je ne suis pas tout à fait sûr de la façon de procéder autrement qu'en utilisant une boucle, mais je pense qu'il existe un moyen plus simple.
Jetons un œil à la référence constructeur de basic_string
, on peut voir qu'il n'y a pas de moyen facile de répéter une chaîne complète . Pour un seul caractère, vous pouvez utiliser (2)
comme ça:
std::string s(5, 'a'); // s == "aaaaa"
Pour générer une répétition de chaîne, vous aurez besoin d'une solution de contournement. Il est plus facile de faire cette post-construction en remplissant simplement la chaîne avec, par exemple, std::generate
(s'amuser avec les algorithmes).
#include <string>
#include <algorithm>
// ...
std::string pattern("Xeo ");
auto pattern_it = pattern.begin();
std::string s(256, '\0');
std::generate(s.begin(), s.end(),
[&]() -> char {
if(pattern_it == pattern.end())
pattern_it = pattern.begin();
return *pattern_it++; // return current value and increment
});
Si vous voulez une chaîne très longue, vous pouvez réduire le nombre de répétitions de boucle en doublant.
#include <string>
using std::string;
string repeatToLength ( unsigned len, string s ) {
string r, si = s;
// add all the whole multiples of s.
for ( unsigned q = len / s.size(); q > 0; q >>= 1 ) {
if ( q & 1 ) r += si; // add si to r if the low bit of q is 1
si += si; // double si
}
r += s.substr ( 0, len - r.size() ); // add any remainder
return r;
}
const string myName = "Blivit";
int numLeftOver = 256 % myName.length();
string Names;
for ( int Index = 0; Index < (256 / myName.length() ); ++Index ) {
Names += myName;
}
Names += myName.substr(0, numLeftOver);
C'est si vous souhaitez générer la chaîne. Je suis assez sûr qu'il existe un moyen plus court de le faire ...
http://www.cplusplus.com/reference/string/string/
Autant que je sache, vous ne souhaitez réserver que 256 éléments.
Il n'y a pas de constructeur pour cela, et vous ne pouvez pas définir la capacité () à l'initialisation. Vous souhaitez probablement utiliser .reserve après l'initialisation. Attention réserve ():
Cela peut augmenter ou réduire la taille de l'espace de stockage dans la chaîne, bien que notez que la capacité résultante après un appel à cette fonction n'est pas nécessairement égale à res_arg mais peut être égale ou supérieure à res_arg, donc la réduction des demandes peut ou non produire une réduction réelle de l'espace alloué dans une implémentation de bibliothèque particulière.
Peut-être avez-vous besoin d'un type différent?
si vous voulez juste remplir votre chaîne, utilisez:
http://en.cppreference.com/w/cpp/string/basic_string/basic_string deuxième.