Home >Backend Development >C++ >How to Trim Leading and Trailing Spaces from a String in C ?

How to Trim Leading and Trailing Spaces from a String in C ?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-19 09:28:03393browse

How to Trim Leading and Trailing Spaces from a String in C  ?

Removing Leading and Trailing Spaces from a String

Trimming leading and trailing spaces from a string object in C is a common task. The string class lacks native methods to accomplish this, but it can be achieved through a combination of string manipulation techniques.

To remove leading and trailing spaces, the find_first_not_of and find_last_not_of functions can be used to identify the first and last non-whitespace characters in the string. Once these positions are determined, the substr function can be employed to extract the substring without the leading and trailing spaces.

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

Extending the Formatting to Reduce Extra Spaces

To remove extra spaces between words in a string, a more comprehensive approach is required. This can be achieved by repeatedly using the find_first_of, find_last_not_of, and substr functions to replace subranges of spaces with a placeholder character or string.

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

Usage Example

The following code snippet demonstrates how to use these functions:

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;

This code will produce the following output:

[too much               space]  
[too much space]  
[too-much-space]  
[one  
two]  

The above is the detailed content of How to Trim Leading and Trailing Spaces from a String in C ?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn