【问题标题】:How to pass string iterator variable to a function in c++?如何将字符串迭代器变量传递给C++中的函数?
【发布时间】:2020-05-28 17:49:37
【问题描述】:

以下代码只是使用另一个名为 recurse 的函数打印从主函数获得的字符串。我只是想知道如何将字符串迭代器变量传递给另一个函数。但是我写的代码没有打印任何结果。有人可以告诉我错误是什么以及我可以做些什么来使代码正常工作吗?

#include <iostream>
#include <string>
using namespace std;

void recurse(string::iterator &start, string::iterator &end)
{
    while(start != end)
    {
        cout << *start;
        ++start;
    }
}

int main()
{
    string s;
    string::iterator i = s.begin(), j = s.end();

    cout << "Enter the string here: ";
    getline(cin, s);

    recurse(i, j);

}

【问题讨论】:

  • getline 您的迭代器无效。输入字符串后,您应该调用begin/end。也不要通过引用传递迭代器,它们是轻量级对象,通过值传递。下面recurse(s.begin(), s.end());就可以了。

标签: c++ string function iterator


【解决方案1】:

在初始化期间,i and j 指向无效地址(因为s 为空)。但是当你接受输入时,它会得到一个新字符串,i and j 指向旧地址(invalid)。

所以在接受输入后声明迭代。

string s;

cout << "Enter the string here: ";
getline(cin, s);
string::iterator i = s.begin(), j = s.end();

recurse(i, j);

【讨论】:

  • 哦! @rafix07 已经在评论部分回答了这个问题。这也是我想说的。
猜你喜欢
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2020-10-03
  • 2016-12-03
相关资源
最近更新 更多