从字符串中删除char的第一个和最后一个实例

时间:2017-10-27 08:26:18

标签: c++ string

我有一个.ini文件,在其中我声明了像:

这样的章节
  

[SectionName]

我想摆脱'['和']'只读入SectionName,目前我用它来实现我想要的东西:

line.substr(1, line.size() - 2);

但这只能摆脱第一个和最后一个角色,无论它们是什么。我正在寻找一种优雅的方法来删除第一次出现的'['和最后一次出现的']'。提前谢谢!

编辑: 我试过用这个:

void TrimRight(std::string str, std::string chars)
{
    str.erase(str.find_last_not_of(chars) + 1);
}

void TrimLeft(std::string str, std::string chars)
{
    str.erase(0, str.find_first_not_of(chars));
}

TrimLeft(line, "[");
TrimRight(line, "]");

但这并不是因为某种奇怪的原因而将它们移除......

2 个答案:

答案 0 :(得分:1)

您可以使用字符串front()back()成员函数:

find

或者如果你想要删除:

-print0

.pop_back() 函数删除最后一个字符。您的函数是按值接受参数,而不是引用。以下是功能变体:

#include <iostream> #include <string> int main() { std::string s = "[Section]"; if (s.front() == '[' && s.back() == ']') { s.erase(0, 1); s.pop_back(); } std::cout << s; } 函数,您可以通过引用传递参数:

if (s.front() == '[') {
    s.erase(0, 1);
}
if (s.back() == ']') {
    s.pop_back();
}

以及返回void的函数:

void trimstr(std::string& s) {
    if (s.front() == '[' && s.back() == ']') {
        s.erase(0, 1);
        s.pop_back();
    }
}

答案 1 :(得分:0)

使用string::find_first_of()string::find_last_of()查找两个字符的位置。然后得到这两个位置之间的子串:

int main() {
    std::string s("[SectionName]");
    size_t first = s.find_first_of('[');
    size_t last = s.find_last_of(']');
    if (std::string::npos != first && std::string::npos != last)
    {
        std::cout << s.substr(first + 1, last - first - 1);
    }
    return 0;
}

Demo