C ++将随机字符添加到字符串数组中

时间:2014-03-19 22:01:30

标签: c++ arrays string random character

所以我想创建1000个单词,长度为5个随机字符。在我的主要内容中我有[1000]字,但是当我尝试运行此代码时,它会给我一个错误说"表达式:字符串下标超出范围"。我不确定为什么会这样,因为我认为字符串数组是二维的?如果有人能告诉我为什么我的代码错了,我会很感激。感谢。

void createText(string w[], int seed) {
char ch;
srand(seed);
for(int i = 0; i < 1000; i++) {
    for(int j = 0; j < 5; j++) {
        ch = ('A' + rand() % 26);
        w[i][j] = ch;
    }
}

for(int i = 0; i < 1000; i++) {
    cout << w[i];
}
cout << endl;
}

2 个答案:

答案 0 :(得分:0)

如果数组是二维的,则无法像w [i]那样打印其值。你必须打印始终牢记数组是二维的,这意味着输出必须像cout&lt;&lt; W [i] [j];

另外,你传递的是一个字符串数组作为参数,你正在做的是为每个单独的位置添加字符,这意味着你实际上除了在该字符串中插入了1000个字符之外什么都没有(因为你实际上添加了“one-char”字符串,所以你只需要放200个单词,每个单词长度为5个字符。直接插入字符串,你将获得1000个单词,但首先找到一种方法来构建具有随机字符的字符串。

类似的东西:

对于(条件){

对于(条件){ 建立一个词 }

array [x] [y] = string }

我想这与你打算做的相似

答案 1 :(得分:0)

我认为数组w没有1000个元素,还记得在这里你将获得string w[]的副本。更好的是将指针传递给w (string* w),那么你将非常清楚地知道出了什么问题。还记得cout写出字符串,直到它到达'\0'字符,这也可能是原因。与gdb的快速会话将有助于:

gdb program
...
run
bt full

应该指出你的问题。如果是某种IDE,请学习如何在其中进行调试。 Valgrind或其他一些memcheck,如视觉泄漏检测器或luke stackwalker,也会向您展示一些关于错误初始化或未提及内存泄漏的提示。