搜索子串

时间:2012-10-27 04:23:40

标签: c++ substring

我是一名编程学生。我被要求编写一个程序来搜索另一个字符串的子字符串,但我不想使用字符串类中提供的find()函数。到目前为止我编写的代码有效,但它使用find()函数。如何将此更改为不使用find函数并仍然给我子字符串的位置?这是我的代码:

    #include <iostream>
    #include <string>

    using namespace std;

    int f_r(string, string);
    int main()
    {
        string s;
        string t;
        cout << "\nEnter the string to be searched: ";
        getline(cin,s);
        cout << "Now enter the string you want to search for: ";
        cin >> t;
        if (f_r(s,t) == 0)
        {
            cout << "\n Substring could not be found.";
        }
        else
        {
            cout << "\nThe index of substring is =  " << f_r(s,t) << endl;
        }
        system("PAUSE");
        return 0;
    }

    int f_r(string str, string c)
    {
        int pos = 0;
        pos = str.find(c, pos);
        if (pos > str.length())
        {
           return 0;
        }
        else
        {
           pos++;
           return pos - 1;
        }

     }

3 个答案:

答案 0 :(得分:1)

您需要一次搜索字符串 一个字符 中的匹配项,即将字符串视为字符数组(因为您显然正在工作)在C / C ++中非常方便,因为stringchar[]是同义词。)

您可能需要在两个字符串中维护索引或指针到当前位置。

这将是天真的/初始的方法,当你得到相当好的工作时,假设你有点好奇,你会开始想知道是否有更有效的方法这样做,例如跳过一些字符在某些情况下,或使用基础语言中的文本的一般统计数据。

答案 1 :(得分:0)

这项技术可能会有所帮助:

|_|_|_|_|_|_|_|_|_|_|_|
     ^   ^
     i  i+j 
         | 
    |_|_|_|_| 
         ^
         j

答案 2 :(得分:-1)

int search(char *a,char *b)
{
  int i=0,j=0,k=0,m,n,pos;
  m=strlen(a);
  n=strlen(b);
  while(1)
  {
    while((a[i]==b[j]) && b[j]!=0)
   {
     i++;
     j++;    
   }
   if (j==n)
   {
     pos=i-j;
     return(pos);
   }
   else
  {
     i=i-j+1;
     j=0;
  }
}}

我有这个代码。我希望它会对你有所帮助。

注意: - 它是一个旧代码