C ++创建一个10x10的网格,每个点都有一个随机字符?

时间:2018-06-22 01:40:56

标签: c++

我是C ++的新手,并于今年夏天参加了初学者课程。我们的第一个项目需要输出10x10的网格。斑点标记为0-99。每个斑点还具有随机字符。它可以是ASCII列表中的大写或小写字母。输出示例:(假设这是10x10而不是3x3)

99.f  98.c  97.Q
96.D  95.Y  94.b
93.x  92.H  91.o

我坚持创建网格并用数字标记每个点。这是我到目前为止的内容,它输出一个10x10的0网格。

#include <iostream>

using namespace std;

int main()
{
    const int ROWS = 10;
    const int COLUMNS = 10;
    cout << "Grid\n" << endl;

    int arrayxy [ROWS][COLUMNS] = {{1-10},{10-20},{20-30},{30-40},{40-50},
                                   {50-60},{60-70},{70-80},{80-90},{90-100}};

    for (int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLUMNS; ++j)
    {
        arrayxy[i][j] = 0;
        cout << arrayxy[i][j];
    }
    cout << '\n';
    }

    cout << endl;

    return 0;
}

2 个答案:

答案 0 :(得分:3)

C ++库提供std::random_device,可用于生成一定范围内的随机数。给定ASCII字符的值(请参见ASCIITable.com),您将需要一个范围94来生成' '(空格)和'~'(ASCII值{{1 }}到32)。您可以简单地生成126范围内的值,并将0-94添加到该值。

一个简单的实现是:

' '

使用/输出示例

#include <iostream>
#include <random>

#define ROWS 10
#define COLS ROWS
#define NCHR 94

using namespace std;

int main (void) {

    int arrayxy [ROWS][COLS] = enter image description here;
    random_device rd;    /* delcare the randon number generator device */
    uniform_int_distribution<int> dist(0, NCHR); /* create disribution */

    /* fill arrayxy with random char */
    for (int i = 0; i < ROWS; i++)
        for (int j = 0; j < COLS; j++)
            arrayxy[i][j] = dist(rd) + ' ';     /* assign random value */

    /* output arrayxy */
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++)
            cout << "  " << (char)arrayxy[i][j];
        cout << '\n';
    }
    cout << '\n';

    return 0;
}

仔细检查一下,如果还有其他问题,请告诉我。

答案 1 :(得分:-1)

对于填充数组的循环,您可以尝试以下操作:

在代码中添加以下标头:

#include <stdlib.h> // For random function

main()顶部的某处调用以下函数:

srand(0); // Seed random

More info on random here

将数组的类型从int更改为char,以便:

char arrayxy [ROWS][COLUMNS] = {...}

这将确保您在致电cout时打印字母而不是数字。

现在修复循环,在其中填充数组如下:

for(int j = 0; j < COLUMNS; ++j)
{    
    arrayxy[i][j] = ( rand() % 32 ) + 65;
    if( arrayxy[i][j] > 90) {
        array[i][j] += 6;
    }

上面的代码中发生的事情如下:

  1. 生成一个从0到32的随机数(有32个字符);
  2. 根据ASCII character set
  3. ,我们在该数字上加上65
  4. 我们注意到在90到96之间有符号,因此我们检查随机数是否在90之上,如果是,则在其上加上6以使其为小写字符。