有人可以帮助我,我对字符串迭代器有问题。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string s("foo $deli: baa :deli$ no matter")
string deli_open ("$deli:");
string deli_close (":deli$");
string::const_iterator it_begin = s.begin();
string::const_iterator it_end = s.begin();
// calculate won't work because I need the Iterposition!
size_t found = s.find(deli_open);
if (found != string::npos)
cout << found << '\n';
// your idea
// return $deli: baa :deli$
for( string::const_iterator i = it_begin; i != it_end; ++i)
{
cout << (*i) ;
}
cout << endl;
这应该是解决方案:
返回iteratorposion it_begin at“$ deli:baa:deli $ no”
在“foo $ deli:baa:deli $”
返回iteratorposition it_end答案 0 :(得分:0)
您所要求的内容并不完全清楚 - 我假设您正在寻找一个指向结束分隔符末尾的迭代器。
这可以通过以下步骤完成:
在找到之后(你从搜索中获得的迭代器将指向它的开头),将迭代器推进N个位置,N是结束分隔符的长度:
using namespace std;
int main() {
string s("foo $deli: baa :deli$ no matter")
string deli_open ("$deli:");
string deli_close (":deli$");
size_t startOpenDelim = s.find(deli_open);
if (startOpenDelim == string::npos)
cerr << "opening delimiter not found\n";
size_t startCloseDelim = s.find(deli_close, startOpenDelim);
if (startCloseDelim == string::npos)
cerr << "closing delimiter not found\n";
size_t endCloseDelim = startCloseDelim + deli_close.length();
string::const_iterator it_begin = s.begin() + startOpenDelim;
string::const_iterator it_end = s.begin() + endCloseDelim;
cout << string(it_begin, it_end) << endl;
}