【问题标题】:How to Assign Random String to 2D Array如何将随机字符串分配给二维数组
【发布时间】:2020-07-27 20:52:44
【问题描述】:

程序读取每行包含一个单词的文件。读取随机单词后,将随机单词放入指针中并返回指针。在主函数中 printf("%s",func("example.txt",str)) 它在程序运行时打印不同的字符串。我想在二维数组(20*20)中执行此操作,如表,但我无法想象如何这样做。当我在内部循环中打印函数时,它在每个循环步骤中都给了我相同的词。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char *word(char *file, char *str);

int main() {
    char *str ;
    int i, j;

    str = (char *)malloc(20);
    srand(time(NULL));
    char *puzzle[20][20];

    for (i = 0; i < 20; i++) {
        for (j = 0; j < 20; j++) {
            puzzle[i][j] = word("words.txt", str);
        }
    }

    for (i = 0; i < 20; i++) {
        for (j = 0; j < 20; j++) {
            printf("%s     ", puzzle[i][j]);
        }

        printf("\n");
    }
}

char *word(char *file, char *str) {
    int end, loop, line;


    FILE *fd = fopen(file, "r");

    if (fd == NULL) {
        printf("Failed to open file\n");
        return (NULL);
    }

    srand(time(NULL));
    line = rand() % 100 + 1;

    for (end = loop = 0; loop < line; ++loop) {
        if (0 == fgets(str, 20, fd)) {
            end = 1;
            break;
        }
    }

    if (!end)
        return (char *)str;

    fclose(fd);
    free(str);
}

【问题讨论】:

  • 标准main sn-p 装饰是您问题的接近答案。尝试创建一个指针数组(例如;char *a[sizeRow][sizeCol]),然后为每个指针定义相应的字符串(例如;a[2][3] = strdup(...))。
  • 谢谢它很有用,但我仍然无法想象我应该在哪里调用返回指针的其他函数,我需要这个,因为另一个函数每次运行时只返回一个随机地址。并分配我认为一个接一个不会是随机的
  • 你最好展示你最初的努力和代码,这样我(或其他人)可以帮助找出是否存在任何错误。
  • İt 已编辑。我知道拼图[i][j]=word("words.txt",str);不合逻辑
  • edit:每行或每列最多 20 个字符,因为它是 20*20 表。我将从文件中取出 10 个单词。每个字符串的(单词)长度可能不同我要打印的位置(字符串开头)将是随机的,如果 10 个单词后有空格,我将在那里打印随机字母,但现在这不是我的主要问题。@ssd

标签: c arrays string random


【解决方案1】:

我没有你的words.txt 文件,所以我在下面创建了一些随机字符串。

还有一个注释:

  • 因为您的嵌套循环位于main 中,您的代码在子函数中打开文件并返回而不关闭它;然后返回子目录并重新打开,一次又一次……最好在从子目录返回之前立即读取并关闭文件。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char **word(int countString, int maxChars) {
    int i;
    int j;
    int k;
    // allocate memory for pointers that are pointing to each string
    char **arrStr = malloc(countString * sizeof(char *));

    // srand(time(NULL));

    for (i = 0; i < countString; i++) {
        // create a random string with a length of 'k'
        // say, 5 <= k <= maxChars
        // that (+ 1) is for the string terminating character '\0'
        k = (rand() % (maxChars - 5)) + 5 + 1;
        // allocate memory for string
        arrStr[i] = malloc(k * sizeof(char));

        for (j = 0; j < k - 1; j++) {
            *(arrStr[i] + j) = rand() % 26 + 'A';
        }

        *(arrStr[i] + j) = '\0';
    }

    return arrStr;
}

int main() {
    int countString = 10;
    int maxChars = 20;
    char **arrStr = NULL;
    int i;

    arrStr = word(countString, maxChars);

    for (i = 0; i < 10; i++) {
        printf("%s\n", *(arrStr + i));
    }

    // do not forget to free the strings
    // and then the string pointers (array)

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2017-12-12
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多