我想编写一个代码来查找另一个中的char数组并打印出第一个数组首次出现的地方(元素)。我编写了自己的代码并且有效。但它“似乎”有点混乱。有没有人有更好的想法重写这段代码?
“只允许使用strlen()。我需要通过设计循环来编写它。”
这是代码
#include <iostream>
#include <string.h>
using namespace std;
const int len = 100;
int main() {
int i, j, k, l;
char a[len]="leonardo" , b[len]="nar";
bool es1 = false, es2=false;
i = 0;
while(i < len && !es1)
{
j = 0;
if(a[i] == b[j])
{
k = i+1;
l = j;
while (k < i+strlen(b) && !es2)
{
j = j+1;
if (a[k] == b[j]) k = k+1;
else es2 = true;
}
if (a[i+strlen(b)-1]==b[l+2] && !es2) es1 = true;
else i = i+1;
}
else i= i+1;
}
cout << endl << "element: " << i;
return 0;
}
顺便说一句,这不是真正的功课。我只是准备好参加编程考试。
我发现如果数组b []短于3个元素,代码就不能正常工作。所以看起来代码需要重大审核!
答案 0 :(得分:3)
这样做的简单方法是使用std::search
:
auto it = std::search(a, a + 8, b, b + 3));
此处,it
指向a
中找到的序列的开头,如果未找到则指向std::end(a)
。
答案 1 :(得分:1)
这看起来像子串搜索算法。您可以使用任何公认的算法,例如KMP。
答案 2 :(得分:0)
您可以使用字符串而不是char数组吗?如果是这样,您可以使用string :: find。
http://www.cplusplus.com/reference/string/string/find/
bool bFound = strA.find(strB)