C++ 获取分隔符的迭代器位置

标签 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 matter"

返回位于“foo $deli: baa :deli$”的迭代器位置 it_end

最佳答案

目前还不完全清楚你在问什么——我假设你正在寻找一个指向结束定界符末尾的迭代器。
这可以通过以下步骤完成:

  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;
    }
    

关于C++ 获取分隔符的迭代器位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321045/

相关文章:

c++ - std::tuple 中的空类

c++ - Switch Case 语句 C++ 编码风格

oracle - 如何修剪所有字符串类型表中所有行中的所有列?

android - SQLite - 从 csv 文件中将带有换行符的字符串插入数据库

通过 NULL 指针访问 C++ 静态常量

c++ - C++代码跳过获取行语句的问题

arrays - Mongoose 枚举字符串数组验证?

Java - 遍历 ArrayList 的问题

iterator - 返回 RefCell 中 Vec 的迭代器

string - Swift 生成器 : What is the counterpart to next()?