【发布时间】:2016-03-21 08:36:35
【问题描述】:
我正在尝试用 C++ 完成一些事情(请注意初学者),但我遇到了问题。我正在尝试生成一个带有大写/小写字母 a-z、数字和空格的随机字符串。正如您从代码中看到的那样,我创建了另一个包含这些符号的字符串,并使用rand() % size 为新字符串分配了一个随机字符。这里的问题是,在控制台上打印字符串时,我会看到其他符号,例如“?、!、-、=、。”和别的。这是为什么?
int fillRandomlyStr(char * str, unsigned len) {
char symbols [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";
unsigned length = strlen(symbols);
for (unsigned i = 0; i < len; i++) {
str[i] = symbols[rand() % length];
}
std::cout << "Отпечатване на низ със случайно генерирани символи: \n" << str << std::endl;
//Printing a string with randomly generated chars
return 0;
}
之前我做了类似的事情,用辅音替换字符串中的元音,效果很好。这里是:
int replaceVowels(char * str) {
const char letters [] = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ";
unsigned len = strlen(str);
for (unsigned i = 0; i < len; i++)
{
switch (str[i])
{
case 'a': str[i] = letters[rand() % 40];
case 'A': str[i] = letters[rand() % 40];
case 'o': str[i] = letters[rand() % 40];
case 'O': str[i] = letters[rand() % 40];
case 'e': str[i] = letters[rand() % 40];
case 'E': str[i] = letters[rand() % 40];
case 'i': str[i] = letters[rand() % 40];
case 'I': str[i] = letters[rand() % 40];
case 'y': str[i] = letters[rand() % 40];
case 'Y': str[i] = letters[rand() % 40];
case 'u': str[i] = letters[rand() % 40];
case 'U': str[i] = letters[rand() % 40];
}
}
std::cout << "Заменени всички гласни в низа с произволни съгласни: \n" << str << std::endl; //Printing it out
return 0;
}
那么为什么在生成随机字符串的时候会出现这个问题呢?我将不胜感激。
【问题讨论】:
-
由于缺少
break,你的“元音替换器”替换了'a'十二次,'A'十一次,'o'十次,依此类推。