0

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

这里的size是随机生成的,比如size=3,会打印出“Behold”、“donkey”和“none”。在添加到数组之前,我想检查它是否在里面。如果“看哪”、“驴”、“无”在数组内,如果我得到另一个词“驴”,它将拒绝并返回循环并生成另一个,因此我使用 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;
    }
}
4

1 回答 1

0

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

首先,编写char ** find( const char * what, const char ** begin, const char ** end )函数,搜索范围从beginend直到它遇到一个等于what或直到它到达的元素end。元素的平等可以由strcmp功能决定。

第二,使用它。在你选择了一个之后random_stringfind在你的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 代码。

于 2013-01-29T20:47:24.080 回答