Maison >développement back-end >C++ >Comment supprimer efficacement les espaces de début, de fin et supplémentaires d'une chaîne C ?

Comment supprimer efficacement les espaces de début, de fin et supplémentaires d'une chaîne C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-11 17:07:03432parcourir

How to Efficiently Remove Leading, Trailing, and Extra Spaces from a C   String?

Suppression des espaces de début et de fin d'une chaîne en C

Problème :

Comment faire pouvons-nous supprimer efficacement les espaces de début et de fin d’une chaîne C ? De plus, comment pouvons-nous étendre cette opération pour supprimer les espaces supplémentaires entre les mots dans la chaîne ?

Solution :

Suppression des espaces de début et de fin :

  • find_first_not_of(char) : utilisez cette fonction pour rechercher le premier caractère de la chaîne qui n'est pas un caractère d'espacement.
  • find_last_not_of(char ) : utilisez cette fonction pour rechercher le dernier caractère de la chaîne qui n'est pas un caractère d'espacement.
  • substr(start, length) : utilisez cette fonction pour extraire la sous-chaîne entre l'index de départ et la longueur spécifiée.
std::string trim(const std::string& str, const std::string& whitespace = " \t") {
    const auto strBegin = str.find_first_not_of(whitespace);
    if (strBegin == std::string::npos)
        return ""; // No content

    const auto strEnd = str.find_last_not_of(whitespace);
    const auto strRange = strEnd - strBegin + 1;

    return str.substr(strBegin, strRange);
}

Réduction des espaces supplémentaires :

  • find_first_of(char) : Utilisez cette fonction pour rechercher le premier caractère d'espacement dans la chaîne.
  • find_first_not_of(char) : Utilisez cette fonction pour rechercher le premier caractère non-espace après le caractère d'espacement.
  • replace(start, length, new_str) : utilisez cette fonction pour remplacer la plage de caractères spécifiée par une nouvelle chaîne.
std::string reduce(const std::string& str, const std::string& fill = " ", const std::string& whitespace = " \t") {
    // Trim first
    auto result = trim(str, whitespace);

    // Replace sub ranges
    auto beginSpace = result.find_first_of(whitespace);
    while (beginSpace != std::string::npos) {
        const auto endSpace = result.find_first_not_of(whitespace, beginSpace);
        const auto range = endSpace - beginSpace;

        result.replace(beginSpace, range, fill);

        const auto newStart = beginSpace + fill.length();
        beginSpace = result.find_first_of(whitespace, newStart);
    }

    return result;
}

Exemple :

const std::string foo = "    too much\t   \tspace\t\t\t  ";
const std::string trimmedFoo = trim(foo);
const std::string reducedFoo = reduce(foo);

std::cout << "Original: " << foo << std::endl;
std::cout << "Trimmed: " << trimmedFoo << std::endl;
std::cout << "Reduced: " << reducedFoo << std::endl;

Sortie :

Original:     too much        space              
Trimmed: too much space
Reduced: too-much-space

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn