Suppression des espaces de début et de fin d'une chaîne
La suppression des espaces de début et de fin d'un objet chaîne en C est une tâche courante. La classe string ne dispose pas de méthodes natives pour y parvenir, mais cela peut être réalisé grâce à une combinaison de techniques de manipulation de chaînes.
Pour supprimer les espaces de début et de fin, les fonctions find_first_not_of et find_last_not_of peuvent être utilisées pour identifier le premier et le dernier caractères autres que des espaces dans la chaîne. Une fois ces positions déterminées, la fonction substr peut être utilisée pour extraire la sous-chaîne sans les espaces de début et de fin.
#include <string> std::string trim(const std::string& str) { const auto strBegin = str.find_first_not_of(" "); if (strBegin == std::string::npos) { return ""; } const auto strEnd = str.find_last_not_of(" "); const auto strRange = strEnd - strBegin + 1; return str.substr(strBegin, strRange); }
Extension du formatage pour réduire les espaces supplémentaires
Pour supprimer les espaces supplémentaires entre les mots dans une chaîne, une approche plus globale est nécessaire. Ceci peut être réalisé en utilisant à plusieurs reprises les fonctions find_first_of, find_last_not_of et substr pour remplacer des sous-plages d'espaces par un caractère ou une chaîne d'espace réservé.
std::string reduce(const std::string& str, const std::string& fill = " ") { auto result = trim(str); auto beginSpace = result.find_first_of(" "); while (beginSpace != std::string::npos) { const auto endSpace = result.find_first_not_of(" ", beginSpace); const auto range = endSpace - beginSpace; result.replace(beginSpace, range, fill); const auto newStart = beginSpace + fill.length(); beginSpace = result.find_first_of(" ", newStart); } return result; }
Exemple d'utilisation
L'extrait de code suivant montre comment utiliser ces fonctions :
const std::string foo = " too much\t \tspace\t\t\t "; const std::string bar = "one\ntwo"; std::cout << "[" << trim(foo) << "]" << std::endl; std::cout << "[" << reduce(foo) << "]" << std::endl; std::cout << "[" << reduce(foo, "-") << "]" << std::endl; std::cout << "[" << trim(bar) << "]" << std::endl;
Ce code produira le résultat suivant :
[too much space] [too much space] [too-much-space] [one two]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!