C ++获取分隔符的iteratorposition

时间:2014-03-11 09:10:18

标签: c++ string iterator delimiter

有人可以帮助我,我对字符串迭代器有问题。

#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

1 个答案:

答案 0 :(得分:0)

您所要求的内容并不完全清楚 - 我假设您正在寻找一个指向结束分隔符末尾的迭代器。
这可以通过以下步骤完成:

  1. 找到开头分隔符后,从中搜索作为结束分隔符。
  2. 在找到之后(你从搜索中获得的迭代器将指向它的开头),将迭代器推进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;
    }