Maison >développement back-end >C++ >Comment supprimer les espaces de début et de fin et réduire plusieurs espaces en espaces simples dans une chaîne C ?

Comment supprimer les espaces de début et de fin et réduire plusieurs espaces en espaces simples dans une chaîne C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-13 07:07:02282parcourir

How do I remove leading and trailing spaces, and reduce multiple spaces to single spaces in a C   string?

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

Cette tâche, communément appelée découpage de chaîne, peut être accomplie à l'aide de la classe de chaîne de C. Pour gérer les espaces supplémentaires potentiels entre les mots, une opération distincte appelée réduction de chaîne est utilisée.

Coupage des espaces de début et de fin

Pour supprimer les espaces de début et de fin, la fonction trim() peut être définie en utilisant les méthodes find_first_not_of et find_last_not_of :

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 de chaîne

Pour supprimer les espaces supplémentaires entre les mots, la fonction réduire() effectue les opérations suivantes :

  1. Coupe la chaîne à l'aide de la fonction trim().
  2. Remplace les espaces consécutifs par un seul espace à l'aide de find_first_of, find_first_not_of, et remplacez.
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;
}

Utilisation

Le code suivant démontre le utilisation des fonctions trim() et réduire() :

int main(void)
{
    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;
}

Sortie

[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!

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