"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo eliminar espacios iniciales, finales y adicionales de una cadena en C++?

¿Cómo eliminar espacios iniciales, finales y adicionales de una cadena en C++?

Publicado el 2024-11-22
Navegar:881

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

Eliminar espacios iniciales y finales de una cadena en C

La manipulación de cadenas en C a menudo implica eliminar espacios innecesarios de las cadenas. Esto puede ser particularmente útil para tareas como limpieza de datos o procesamiento de texto.

Eliminar espacios iniciales y finales

Para eliminar espacios iniciales y finales, se puede emplear find_first_not_of y métodos find_last_not_of. Estas funciones encuentran el primer y último carácter que no es un espacio en blanco en una cadena, respectivamente. Usando estos valores, se puede obtener la subcadena que contiene los caracteres que no son espacios en blanco:

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);
}

Eliminar espacios adicionales entre palabras

Para eliminar espacios adicionales entre palabras, se requiere un paso adicional. Esto se puede lograr usando los métodos find_first_of, find_last_of, find_first_not_of y find_last_not_of junto con substr para reemplazar los espacios adicionales con un solo espacio:

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;
}

Ejemplo de uso

El siguiente fragmento de código demuestra el uso de estas funciones:

const std::string foo = "    too much\t   \tspace\t\t\t  ";
const std::string bar = "one\ntwo";

std::cout 

Salida:

[too much               space]
[too much space]
[too-much-space]
[one
two]
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3