C ++删除字符串中的额外空格或制表符

时间:2012-11-30 04:57:29

标签: c++ boost

我需要从1.47\t\t4.32 5.1 \t\tf41.4这样的行中删除多余的空格。 我如何通过提升来做到这一点?

3 个答案:

答案 0 :(得分:2)

如果你只是想轻松地做,我会使用这样的东西:

std::string single_space(std::string const &input) { 
    std::istringstream buffer(input);
    std::ostringstream result;

    std::copy(std::istream_iterator<std::string>(buffer),
              std::istream_iterator<std::string>(),
              std::ostream_iterator<std::string>(result, " "));
    return result.str();
}

如果您担心尽可能快地使用它,您可能需要查看另一个question from earlier today

答案 1 :(得分:0)

我在问题上找到了答案。

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

std::string reduce(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;
}

答案 2 :(得分:0)

这是一个非常简单的删除额外空格的实现。

slideDown