我很难解决这个问题...
编写一个读取两个字符串(不包含空格)的程序 称为searchPattern和longSequence。 程序将在屏幕上显示位置 searchPattern出现在longSequence中。 例如,何时 seachPattern是asd 和longSewuence是asdfasdfasdfasdf (职位是0123456789012345) 程序将显示0,4,8,12。 另一个例子,何时 seachPattern是jj 和longSewuence是kjlkjjlkjjjlkjjjkl (职位是012345678901234567) 该程序将显示4,8,9,13,14。
任何人都可以帮忙吗?
答案 0 :(得分:2)
一些提示:
读入两个字符串。查找“std :: cin”以了解如何阅读和“std :: string”以了解如何存储字符串。
查看std :: string类的find()方法以搜索长字符串中的子字符串。
快走,然后发布你在这里做过的事情。你会发现很多人乐意帮助你,但你必须自己努力。 : - )
作为一个起点,也许只是写出读取字符串的部分。当效果很好时,您可以添加功能。
祝你好运。答案 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行的单一功能。