判断字符串A中是否含有另一个字符串B,其中字符串A可以不连续

xuzhaofangxzf 2016-09-10 10:22:30
如果字符串A:abcdefgh,字符串B:abcdg也可以是A的子串,这种情况怎么判断,用C++怎么实现
...全文
1951 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
木叶流丹 2016-11-08
  • 打赏
  • 举报
回复
楼上正解,不考虑顺序的话,需要逐个比对

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString a,b,str;
    a = "Hello,world";
    b = "wor";  //"word"
    str = a + " contains " + b ;
    for(int i=0;i<b.Length();i++)
    {
    	int t = a.Pos(b.SubString(i+1,1));
    	if(t<=0)
    	{
    		str = a + " doesn't contain " + b ;
    		break ;
    	}
  	}
    ShowMessage(str);
}
  • 打赏
  • 举报
回复
按照他的意思abcdg是abcdefgh的子串啊,不考虑顺序就是集合运算,如果考虑顺序的话,需要逐个字符从前向后匹配,首先查找a,如果找到,从a的下一个位置再向后查找b...
ooolinux 2016-09-12
  • 打赏
  • 举报
回复
没看懂,abcd顺序换了还是子串吗?
  • 打赏
  • 举报
回复
“如果字符串A:abcdefgh,字符串B:abcdg也可以是A的子串”这说明只要B中每个字符在A中都有就可以了,可以用集合运算。
ooolinux 2016-09-11
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString a,b;
    a="Hello,world";
    b="wor";  //"word"

    int Pos=a.Pos(b); //为了兼容Delphi,下标从1开始
    ShowMessage(IntToStr(Pos));
    if(Pos>0)
        ShowMessage(a+" contains "+b);
    else
        ShowMessage(a+" doesn't contain "+b);

    char *sub=strstr(a.c_str(),b.c_str());
    ShowMessage(AnsiString(sub));
    if(sub)
        ShowMessage(a+" contains "+b);
    else
        ShowMessage(a+" doesn't contain "+b);
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧