1

文字列の 2 つの順序付けられた配列が与えられた場合、それらの交差の結果である配列を見つけます。

現在、このアルゴリズムを使用していますが、機能していません。

注: 配列 a と b には数値が文字列として含まれていると確信しているため、atol() は有効です。

char** matchLists(char **a, char **b, int sizeA, int sizeB, int *lSize)
{
    char **list = malloc( sizeof(char *) );
    int pA = 0, pB = 0, listSize = 0;

    while(pA < sizeA && pB < sizeB)
    {

        if(atol(a[pA]) < atol(b[pB]))
        {

            pA++;

        }
        else if(atol(a[pA]) > atol(b[pB]))
        {

            pB++;

        }
        else
        {

            list = realloc(list, sizeof(char *) * (++listSize) );
            list[listSize-1] = b[pB];
            pA++;
            pB++;

        }


    }

    *lSize = listSize;

    return list;

}
4

1 に答える 1

0

あなたの問題はchar**、文字列を格納するために使用していることです。これは、配列ポインタとポインタ渡しの問題との間の混乱である可能性があります。また、listSize の開始は 0 ではなく 1 である必要があります。

したがって、関数は次のようになります..

// only lSize here is pass-by-pointer
char* matchLists(char *a, char *b, int sizeA, int sizeB, int * lSize)
{
    char * list = (char*) malloc(sizeof(char));
    int pA = 0, pB = 0, listSize = 1;

    while(pA < sizeA && pB < sizeB)
    {
        if(atol(a[pA]) < atol(b[pB]))
        {
            pA++;
        }
        else if(atol(a[pA]) > atol(b[pB]))
        {
            pB++;
        }
        else
        {
            list = (char*) realloc(list, sizeof(char)*(++listSize));
            list[listSize-1] = b[pB];
            pA++;
            pB++;
        }
    }

    *lSize = listSize;
    return list;
}

電話:

char a[256] = "This is not a test.";
char b[256] = "This is a test.";

int sizeA = 256;
int sizeB = 256;
int lSize = 1;

char* match = matchLists(a, b, sizeA, sizeB, &lSize);

printf("%s \n", match);
于 2013-07-02T10:17:35.967 に答える