我有一个.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, "]");
但这并不是因为某种奇怪的原因而将它们移除......
答案 0 :(得分:1)
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;
}