• 字符串的查找


    要求:字符串查找即在主串X中查找是否包含子串Y,与字符串包含不同的是,字符串的查找必须是连续的,即Y中的子串必须在X中连续的出现才算。

    如:string main_str="ABCDEF";
    string sub_str_1="BCD";
    string sub_str_2="ACD";

    则在主串main_str中能查找到子串sub_str_1,而不能查找到子串sub_str_2.所以输出结果为1,0.。注意字符串的查找与字符串的包含的不同,具体可参看我的博客字符串的包含

    思路:很容易知道此题实质上是字符串匹配,所以我们可以用简单模式匹配算法或kmp算法解决。

    基于此思路代码如下:
    #include<iostream>
    #include<string>
    using namespace std;
    bool str_find(string main_str,string sub_str)
    {
    	int start=0,j=0;
    	int i=start;
    	while(i<main_str.length()&&j<sub_str.length())
    	//while(main_str[i]!=''&&sub_str[j]!='')//错误,因为string定义的
    	//字符串末尾不包含'',应该用string类的length()属性
    	{
    		//while(j<sub_str.length())最好不while套while
    		{
    			if(main_str[i]==sub_str[j])
    			{
    				i++;
    				j++;
    			}
    			else
    			{
    				//i++;//错误,不能直接这么写,因为当子串部分匹配时,i的值仍加了,所以得用一个标记符,暂存部分匹配时i的起始值,将该值加加
    				start++;
    				i=start;
    				j=0;
    			}
    		}
    	}
    		if(j>=sub_str.length())
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}	
    	
    }
    void main()
    {
    	int i=0;
    	char *pstr="ABCDEF";
    	string main_str="ABCDEF";
    	string sub_str_1="BCD";
    	string sub_str_2="ACD";
    	cout<<str_find(main_str,sub_str_1)<<endl;
    	cout<<str_find(main_str,sub_str_2)<<endl;
    //	while(main_str[i]!='')
    //	{
    //		cout<<main_str[i];
    //		i++;
    //	}
    	/*while(pstr[i]!='')
    	{
    		cout<<pstr[i];
    		i++;
    	}*///这一小段程序说明了在c++中用字符指针指向的字符串常量末尾都
    	//自动的添加了'',但在string类定义的字符串常量末尾不包含'',
    	cout<<endl;
    }
    程序运行结果如下:
    <img src="http://img.blog.csdn.net/20160310155915381" alt="" />
    



  • 相关阅读:
    家庭记账本(七+每周总结)
    家庭记账本(六)
    家庭记账本(五)
    家庭记账本(四)
    家庭记账本(三)
    家庭记账本(二)
    家庭记账本(一)
    2021.2.14(每周总结)
    2021.2.13
    文件上传时报错in a frame because it set 'X-Frame-Options' to 'deny'.
  • 原文地址:https://www.cnblogs.com/hainange/p/6334090.html
Copyright © 2020-2023  润新知