[英]How to find a char array in another one in c++?
我想编写一个代码在另一个数组中查找一个char数组,并打印出第一个数组的第一个出现的place(element)。 我编写了自己的代码,它可以工作。 但是它“似乎”有点凌乱。 有谁有更好的主意来重写此代码?
“仅允许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个元素,则代码将无法正常工作。 因此,似乎代码需要进行重大审查!
最简单的方法是使用std::search
:
auto it = std::search(a, a + 8, b, b + 3));
在这里, it
指向发现序列的开始a
,或者到std::end(a)
如果没有找到。
这看起来像子字符串搜索算法。 您可以使用任何公认的算法,例如KMP 。
可以使用字符串代替char数组吗? 如果是这样,您可以使用string :: find。
http://www.cplusplus.com/reference/string/string/find/
bool bFound = strA.find(strB)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.