您的位置:首页 > 其它

两个字符串 char* a, char* b,输出b在a中的位置次序.

2014-09-14 01:22 183 查看
<span style="font-size:18px;">/*
两个字符串 char* a, char* b,输出b在a中的位置次序.
void output_postion(const char* a, const char* b);
如:a = "abdbcc"      b = "abc"
b 在  a  中的位置次序为
014
015
034
035
这个问题和八皇后问题类似,需要用到递归回溯方法。
当检测完字符串b中的c字符时要回溯到上一个状态再继续寻找匹配的位置。
*/
#include <iostream>
#include <string>
#include <list>
using namespace std;

///*回溯函数,递归寻找匹配的位置*/
void abstring(string &a,int ai,string &b,int bi,list<int> l)
{
//如果字符串b已经遍历结束,则打印list链表内的数值
if(bi == b.length())
{
for( list<int>::iterator it = l.begin(); it != l.end(); ++it)
{
cout<<*it;
}
cout<<endl;
}
else
{
//遍历字符串a,寻找与字符串b匹配的元素位置
for(int i = ai; i < a.length(); ++i)
{
//找到匹配的字符
if(a[i] == b[bi])
{
//将字符的位置加入链表
l.push_back(i);
//继续寻找下一个匹配字符的位置
abstring(a,i+1,b,bi+1,l);

//将链表最后一个元素弹出,回溯到上一个状态
l.pop_back();
}
}
}
}
void output_position(const char *a,const char *b)
{
string as = a;
string bs = b;
list<int> l;

abstring(as,0,bs,0,l);
}

int main()
{
output_position("abdbcabc","abc");
return 0;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐