输入2个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。

本文介绍了一个C++程序,用于找出一个字符串在另一个字符串中的所有可能的连续出现位置,并以序列形式输出这些位置。通过递归的方式实现了这一功能,能够处理各种大小的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



#include "stdafx.h"
#include <string.h>
// 思路:
// 依次找到一个父位置,
// 1: 到叶子结点时,找到多个位置
// 返回上一层父结点位置如果又找一个相同位置,执行1:,否则返回到该结点的父结点。


// 输入2个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。即输出125,126,145,146.
void PrintArray(char*p_str,char*s_str,int*print_arr,int p_len,int s_len,int print_arr_num,int p_start_num,int s_start_num)
{
int pStartNum=p_start_num,sStartNum=s_start_num;
int printNum=print_arr_num;
if (printNum==s_len)
{
for (int i= 0;i<s_len;i++)
{
printf("%d\t",*(print_arr+i));
}
printf("\n");
return;
}


for(int i=pStartNum;i<p_len;i++)
{
for (int j=sStartNum;j<s_len;j++)
{
if (*(p_str+i)==*(s_str+j))
{
print_arr[printNum]=i+1;
pStartNum=i;
sStartNum=j;
  PrintArray(p_str,s_str,print_arr,p_len,s_len,printNum+1,pStartNum+1,sStartNum+1);
}
}
}
}
void ConnectSequence(char *p_str,char*s_str)
{
int p_len=strlen(p_str);
int s_len = strlen(s_str);
int *print_arr = new int[s_len];
unsigned int print_arr_num=0;
if (NULL==p_str&&NULL==s_str)
{
printf("string error");
return;
}
if (NULL==print_arr)
{
printf("allocate error");
return;
}
PrintArray(p_str,s_str,print_arr,p_len,s_len,0,0,0);
}


int _tmain(int argc, _TCHAR* argv[])
{
char parstring[]="aabdbcca";// "abdbc"
char sonstring[]="abc";
ConnectSequence(parstring,sonstring);

return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值