在C++中查找两个索引之间的子字符串

8

我想找到两个索引之间的子字符串。在C++中,substr(起始索引, 字符数)函数基于字符数返回子字符串。因此,将其与起始和结束索引一起使用的小技巧如下:

 // extract 'go' from 'iamgoodhere'
 string s = "iamgoodhere";
 int start = 3, end = 4;
 cout<<s.substr(start,end-start+1); // go

C++中还有哪些方法可以获取两个索引之间的子字符串?


为什么 substr 不符合您的要求? - meowgoesthedog
我在面试中被要求不使用 substr,因此才有了这个问题。 - FlyingAura
3个回答

11

你可以这样做:

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++中,范围始终被指定为包括开始和不包括结束。


2
请注意,这种方法相对于 substr 来说不太安全,因为当 end >= s.size() 时会导致未定义行为。 - Wintermute
1
@Wintermute:是的,我刚刚在添加关于那个的注释。 - John Zwinck
1
那就+1吧。我可能会使用迭代器来遍历c_str(),但其实这并不重要。实际上,我可能会使用substr而不是这些方法,但这回答了问题。 :P - Wintermute

1
这是一种解决方案,
std::string distance_finder(std::string str, int start, int end)
{
return str.substr(start, end - start);
}

尽管如此,结束时间始终必须大于开始时间。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接