0

グローバルな静的文字列 str[MAX] = { "aloha" , "behold", "donkey", "key", "joke", "none", "quack", "orange"}; があります。

ここでのサイズはランダムに生成されました。たとえば、サイズ = 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;
    }
}
4

1 に答える 1

0

ポインタと配列の使用を主張する場合...

最初に、からまでの範囲を、 に等しい要素に出会うまで、または に到達するまでchar ** find( const char * what, const char ** begin, const char ** end )検索する関数を作成します。要素の等価性は、関数によって決定できます。beginendwhatendstrcmp

第二に、それを使用します。を選択したら、 内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++ の方法ではありません。

于 2013-01-29T20:47:24.080 に答える