J'essaie d'écrire une fonction qui prend une chaîne et scindre tous les x nombre de caractères: par exemple, si j'ai appelé Cependant, il semble obtenir uniquement les deux premiers résultats (la taille du vecteur est 2), et lorsque Je fais quelque chose comme DIFSLLIGEBNOMBY ("Bonjour!", 2) code>, je devrais obtenir un vecteur contenant: p>
DimsplitsRingBynacher ("Bonjour", 2) code>, il se bloque, probablement parce qu'il tente d'accéder à un indice de réseau qui n'existe pas (il n'existe que 5). Y a-t-il un moyen plus simple de faire cela? P> p>
4 Réponses :
Cela divisera une chaîne en vecteur. S'il n'y a pas un nombre même de scissions, il ajoutera les caractères supplémentaires à la fin.
std::vector<std::string> Split(const std::string& str, int splitLength) { int NumSubstrings = str.length() / splitLength; std::vector<std::string> ret; for (auto i = 0; i < NumSubstrings; i++) { ret.push_back(str.substr(i * splitLength, splitLength)); } // If there are leftover characters, create a shorter item at the end. if (str.length() % splitLength != 0) { ret.push_back(str.substr(splitLength * NumSubstrings)); } return ret; }
Le cœur de l'algorithme revient vraiment aux deux lignes suivantes.
for (size_t i = 0; i < s.size(); i += l) res.push_back(s.substr(i, l));
Cela fonctionne, mais ne semble pas être aussi rapide que la solution de Millsj.
Utiliser cette STD :: String est une collection de caractères, une implémentation simple pourrait être la suivante: échantillon en direct p> p>
Modifier la façon dont vous calculez la taille du vecteur:
for (int i=0; i<size; i++)
Pourquoi aucune chaîne :: substr?
Les VLAS (tels que
tampon de caractère [L] code>) autorisé en C ++?
@barakmanos en C ++ 14 ou avec g ++, oui
@barakmanos Je ne me suis même pas réalisé que c'était une construction non standard. Je suppose que cela aurait dû être quelque chose comme
char * tampon = nouveau char [l] code>?
@Igor: Oui, c'est ce que j'utiliserais ... mais si ça marche pour toi, eh bien, que puis-je dire :) ... dans tous les cas, j'ai écrit une réponse (ci-dessous), suggérant comment vous devriez calculer la taille de votre vecteur.