C ++搜索字符串

时间:2011-03-25 14:14:48

标签: c++

我很难解决这个问题...

编写一个读取两个字符串(不包含空格)的程序 称为searchPattern和longSequence。 程序将在屏幕上显示位置 searchPattern出现在longSequence中。 例如,何时 seachPattern是asd 和longSewuence是asdfasdfasdfasdf (职位是0123456789012345) 程序将显示0,4,8,12。 另一个例子,何时 seachPattern是jj 和longSewuence是kjlkjjlkjjjlkjjjkl (职位是012345678901234567) 该程序将显示4,8,9,13,14。

任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

一些提示:

  1. 读入两个字符串。查找“std :: cin”以了解如何阅读和“std :: string”以了解如何存储字符串。

  2. 查看std :: string类的find()方法以搜索长字符串中的子字符串。

  3. 快走,然后发布你在这里做过的事情。你会发现很多人乐意帮助你,但你必须自己努力。 : - )

    作为一个起点,也许只是写出读取字符串的部分。当效果很好时,您可以添加功能。

    祝你好运。

答案 1 :(得分:0)

要开始考虑这样的问题的解决方案,最好的方法是考虑如何使用笔和纸尽可能详细地解决它,然后尝试将其转换为代码。

答案 2 :(得分:0)

我会使用Test Driven Development并从小开始构建。

例如,忘记用户I / O,并坚持使用硬编码数据:

#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;

int main(void) // For now, can be modified later.
{
  const char pattern[] = "asd";
  const char sequence[] = "asdfasdfasdfasdf";

  std::string::size_type position = 0;
  const std::string longSequence(sequence);
  position = longSequence.find(pattern, position);
  while (position != std::string::npos)
  {
    cout << "pattern found at position: " << position << endl;
    position = longSequence.find(pattern, position);
  }

  cout << "Paused. Press ENTER to continue." << endl;
  cin.ignore(100000, '\n');
  return 0;
}

您可能希望将上述内容转换为使用状态机,而不是使用std::string::find()。同样,这只是一个建立在基础上的基础。

答案 3 :(得分:-2)

这是一个递归的回溯问题。就像让鼠标走出迷宫一样。通过数据定义基本案例和路径。最后,你需要的只是15到20行的单一功能。