我想找到两个索引之间的子字符串。在C++中,substr(起始索引, 字符数)函数基于字符数返回子字符串。因此,将其与起始和结束索引一起使用的小技巧如下:
// extract 'go' from 'iamgoodhere'
string s = "iamgoodhere";
int start = 3, end = 4;
cout<<s.substr(start,end-start+1); // go
C++中还有哪些方法可以获取两个索引之间的子字符串?
你可以这样做:
std::string(&s[start], &s[end+1])
或者这个:
std::string(s.c_str() + start, s.c_str() + end + 1)
或者这个:
std::string(s.begin() + start, s.begin() + end + 1)
这些方法要求end
小于s.size()
,而substr()
则没有此要求。
不要抱怨+1
——在C++中,范围始终被指定为包括开始和不包括结束。
substr
来说不太安全,因为当 end >= s.size()
时会导致未定义行为。 - Wintermutec_str()
,但其实这并不重要。实际上,我可能会使用substr
而不是这些方法,但这回答了问题。 :P - Wintermutestd::string distance_finder(std::string str, int start, int end)
{
return str.substr(start, end - start);
}
除了John Zwinck的答案,您还可以结合使用substr和std::distance:
auto size = std::distance(itStart, itEnd);
std::string newStr = myStr.subStr(itStart, size);
substr
不符合您的要求? - meowgoesthedogsubstr
,因此才有了这个问题。 - FlyingAura