首页 > 解决方案 > 将子字符串提取到最后一个分隔符 C++

问题描述

我正在尝试在 C++ 中找到

  1. 性能最好的
  2. 最优雅的

接受一个字符串和一个整数的代码,对于给定的分隔符,比如说“.”,从最后一个子字符串开始计算到第 n 个。

示例输入:

字符串“abcde”和 delimFromEndLevel = 1 => 字符串“abcd”

字符串“abcde”和 delimFromEndLevel = 2 => 字符串“abc”

等等

起点是以下代码:

void elaborateParent( const std::string& input, unsigned int levels )
{
    std::size_t cutOffIndex = std::string::npos;
    while (levels > 0)
    {
        cutOffIndex = input.rfind('.', cutOffIndex);
        if (cutOffIndex == std::string::npos)
            std::cout << "Not enough levels to go up!" << std::endl; 
        levels--;
        if (levels>0)
        {
            if (cutOffIndex>0)
                cutOffIndex--;
            else
                std::cout << "Not enough levels to go up!" << std::endl;
        }
    }
    std::string result = input.substr(0, cutOffIndex);
    std::cout << "Elaboration parent result: '" << result << "'" << std::endl;
}

标签: c++c++11c++17

解决方案


你把事情复杂化了:)

做就是了:

std::string elaborateParent( const std::string& input, unsigned int levels )
{
  auto result = input;
  for(; levels != -1; --levels) {
    result.erase(result.find_last_of('.'));
  }
  return result;
}

我怀疑你会得到比这更好的表现!


推荐阅读