gpt4 book ai didi

c++ - 从字符串中删除字符的第一个和最后一个实例?

转载 作者:行者123 更新时间:2023-11-27 23:16:32 31 4
gpt4 key购买 nike

我假设以下内容无法编译,因为我正在混合使用正向和反向迭代器。为什么我不能像这样混合它们?我怎样才能让它工作?我想删除字符串的第一个和最后一个引号,但保留所有内部引号。

temp.assign(find(value.begin(), value.end(), '\"'), find(value.rbegin(), value.rend(), '\"'));

我连这个都做不到。反向迭代器有什么意义?

value.erase(find(value.begin(), value.end(), '\"'));
value.erase(find(value.rbegin(), value.rend(), '\"'));

最佳答案

assign 函数(不管 temp 的类型如何)需要两个相同类型的迭代器。反向迭代器没有与普通迭代器的类型相同。你可以在使用 base() 函数的底层普通迭代器反向迭代器,但要小心;它是位置后面的一个反向迭代器指向。例如,如果你写

temp.assign( find( value.begin(), value.end(), '\"' ),
find( value.rbegin(), value.rend(), '\"').base() );

,尾随的 '"' 将成为结果字符串的一部分。

这种特殊的行为通常是你想要的使用结果作为开始迭代器:

std::string( std::find( fn.rbegin(), fn.rend(), '.' ), fn.end() )
例如,

将为您提供最后一个 之后的所有文本'.'。将查找结果与反向迭代器一起使用时作为结束标准,您通常需要将其保存在一个变量,并以某种方式“纠正”它。

最后,您在使用两个发现的结果来定义一个范围,就像你上面做的那样。如果例如,您的文本中没有 '"'相当于:

temp.assign( value.end(), value.begin() );

,这是行不通的。

编辑:

例如,如果您不想要 '"' 字符,我认为以下应该有效:

//  Returns an empty string if there are not two " chars.
std::string
extractQuoted( std::string const& original )
{
// end points to one after the last '"', or begin() if no '"'.
std::string::const_iterator end
= std::find( original.rbegin(), original.rend(), '"' ).base();
if ( end != original.begin() ) {
-- end; // Since we don't want the '"' in the final string
}
return std::string( std::find( original.begin(), end, '"' ), end );
}

(这超出了我的头脑,所以不能保证,但应该让您朝着正确的方向开始。)

关于c++ - 从字符串中删除字符的第一个和最后一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933329/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com