我是一名编程学生。我被要求编写一个程序来搜索另一个字符串的子字符串,但我不想使用字符串类中提供的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;
}
}
答案 0 :(得分:1)
您需要一次搜索字符串 一个字符 中的匹配项,即将字符串视为字符数组(因为您显然正在工作)在C / C ++中非常方便,因为string
和char[]
是同义词。)
您可能需要在两个字符串中维护索引或指针到当前位置。
这将是天真的/初始的方法,当你得到相当好的工作时,假设你有点好奇,你会开始想知道是否有更有效的方法这样做,例如跳过一些字符在某些情况下,或使用基础语言中的文本的一般统计数据。
答案 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;
}
}}
我有这个代码。我希望它会对你有所帮助。
注意: - 它是一个旧代码