我有一个全局静态字符串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;
}
}
答案 0 :(得分:0)
如果你坚持使用指针和数组......
首先,编写char ** find( const char * what, const char ** begin, const char ** end )
函数,搜索从begin
到end
的范围,直到它遇到等于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代码。