打印随机生成的字符串C / C ++的字符,不在随机列表中的字符也被打印

时间:2015-12-15 14:01:11

标签: c++ string random char

我试图用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;
}

那么为什么会出现生成随机字符串时出现此问题?我很感激你的帮助。

1 个答案:

答案 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;
}