谁能帮帮我,我的字符串迭代器有问题。
#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 matter"
返回位于“foo $deli: baa :deli$”的迭代器位置 it_end
最佳答案
目前还不完全清楚你在问什么——我假设你正在寻找一个指向结束定界符末尾的迭代器。
这可以通过以下步骤完成:
- 找到开始定界符后,从那里搜索结束定界符。
找到后(从该搜索中获得的迭代器将指向它的开头),将迭代器前进 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; }
关于C++ 获取分隔符的迭代器位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321045/