0

私はプログラミングの学生です。別の文字列の部分文字列を検索するプログラムを作成するように依頼されましたが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;
        }

     }
4

3 に答える 3

1

文字列ONE character at a time内で一致を検索する必要があります。つまり、文字列を文字の配列であるかのように見る必要があります (明らかに C/C++ で作業しているため、stringchar[]は同義であるため非常に便利です)。

両方の文字列の現在の場所へのインデックスまたはポインターを維持する必要がある可能性があります。

これは単純な/最初のアプローチであり、それがかなりうまく機能するようになると、少し好奇心が強いと仮定すると、より効率的な方法があるかどうか疑問に思うようになります。たとえば、場合によっては一部の文字をスキップするなど、または、基礎となる言語のテキストに関する一般的な統計を使用します。

于 2012-10-27T04:29:53.267 に答える
0

このアートは次のことに役立ちます。

|_|_|_|_|_|_|_|_|_|_|_|
     ^   ^
     i  i+j 
         | 
    |_|_|_|_| 
         ^
         j
于 2012-10-27T07:06:05.153 に答える
-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;
  }
}}

私はこのコードを持っています。お役に立てば幸いです。

注:-古いコードです

于 2012-10-27T04:32:03.640 に答える