我试图用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;
}
那么为什么会出现生成随机字符串时出现此问题?我很感激你的帮助。
答案 0 :(得分:1)
您必须通过添加空字符来终止字符串。
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];
}
str[len] = '\0'; /* add this line */
std::cout << "Отпечатване на низ със случайно генерирани символи: \n" << str << std::endl;
//Printing a string with randomly generated chars
return 0;
}