使用指针添加到数组之前检查重复

时间:2013-01-29 17:53:34

标签: c++

我有一个全局静态字符串str [MAX] = {“aloha”,“behold”,“donkey”,“key”,“joke”,“none”,“quack”,“orange”};

此处的大小是随机生成的,例如,如果size = 3,它将打印出“Behold”,“donkey”和“none”。在添加到数组之前,我想检查它是否在内部。 如果“Behold”,“donkey”,“none”在数组中,如果我得到另一个词“donkey”,它将拒绝并返回循环并生成另一个,因此我使用i -

我不确定哪里出了问题,我希望有人可以启发我。

感谢。这是代码。

typedef char* Strings;

function example (Strings *s, int size)
{
    char *q;

    bool check;

    q = new char[MAX];

    *s = &q[0];
    for (int i = 0; i < size; i++)
    {
        k = rand () % 8;
        if (*s == '\0')
            *s = Str[k];
        else
        {
            check = compare (s, Str[k]);

            if (check == 1)
                *s = Str[k];
            else
                i--;
        }
        ++s;
    }

    cout << endl;
}

bool compare (Strings *s, char *str)
{
    while (*s != '\0')
    {
        if (strcmp (*s, Str))
            return true;
        else
            return false;
        ++s;
    }
}

1 个答案:

答案 0 :(得分:0)

如果你坚持使用指针和数组......

首先,编写char ** find( const char * what, const char ** begin, const char ** end )函数,搜索从beginend的范围,直到它遇到等于what的元素或直到达到end为止。元素的相等性可以由strcmp函数确定。

其次,使用它。选择random_string后,在find内尝试output_array

就像那样:

const size_t Str_count = 8;
const char * Str[ Str_count ] =
{
    "aloha",
    "behold",
    "donkey",
    "key",
    "joke",
    "none",
    "quack",
    "orange"
};

const char **
find( const char * what, const char ** begin, const char ** end )
{
    while( begin != end )
    {
        if( !strcmp( what, *begin ) )
            break;

        begin++;
    }

    return begin;
}

int
generate( char ** output_array, size_t size )
{
    if( size > Str_count )
    {
        // infinite loop would occur
        return 1;
    }

    size_t i = 0;

    while( i < size )
    {
        const char * random_string = Str[ rand() % Str_count ]; // random index in [0-7] I suppose...

        // if we did not encounter the same string within the output_array
        if(    &output_array[ size ]
            == find
               (
                   random_string,
                   ( const char ** ) output_array,
                   ( const char ** ) &output_array[ size ]
               )
          )
        {
            // put the string in there
            output_array[ i ] = new char[ strlen( random_string ) ];
            strcpy( output_array[ i ], random_string );

            ++i;
        }
    }

    return 0;
}

这有效,但我应该警告你:拥有这样的全局变量通常被认为是“糟糕的编程风格”。另外,这不是C ++方式,因为它是纯C代码。