如何在c ++中找到另一个char数组?

时间:2014-02-12 16:04:52

标签: c++ arrays

我想编写一个代码来查找另一个中的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个元素,代码就不能正常工作。所以看起来代码需要重大审核!

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)