2

在 C 中,我想知道是否可以使用 anint作为计数器从我的数组列表中选择一个数组。如果不是,你会如何建议解决这个问题?抱歉,代码可能会更好地解释它:

编辑:对不起,我应该澄清说 inputchar 是单个字符,我试图查看 inputchar 是否是数组中任何单词中的字母

int i;

char word0[] ={'c','a','c','h','e'};
char word1[] ={'i','n','t','e','l'};
char word2[] ={'e','t','h','e','r','n','e','t'};
char word3[] ={'g','i','g','a','b','y','t','e'};
char word4[] ={'l','i','n','u','x'};

for (input = 0;input<i;input++)
{
    if (inputchar==word(i)[input] /*this is the problem here, i want to use the int (i) to chose the array, i is randomized before this in the program */
    {
        w(i)[input]=inputchar;
        lc++;
        printf("You guessed correct! continue on word master");
    }
}
4

5 回答 5

3

对您所拥有的最简单的更改是创建一个指向每个现有数组的指针数组:

char *words[] = { word0, word1, word2, word3, word4 };

因为您的数组不是以 nul 结尾的,所以您还需要知道它们的长度,并且您不能从以下位置访问它words

size_t wordlengths[] = { sizeof(word0), sizeof(word1), sizeof(word2), sizeof(word3), sizeof(word4) };

但是,如果您的代码实际上并不依赖于 5 个不同大小的不同可写数组,包含非终止字符数据,那么您可能会做得更好。

于 2012-11-21T18:06:33.807 回答
1

为什么不使用字符串数组(指针)?

char* words[5];

然后分配各个字符串:

words[0] = "cache";
words[1] = "intel";
words[2] = "ethernet";
words[3] = "gigabyte";
words[4] = "linux";

现在您可以使用数组索引访问它:

words[i][input]
于 2012-11-21T17:54:32.513 回答
1

诀窍是改变:

char word0[] ={'c','a','c','h','e'};
char word1[] ={'i','n','t','e','l'};
char word2[] ={'e','t','h','e','r','n','e','t'};
char word3[] ={'g','i','g','a','b','y','t','e'};
char word4[] ={'l','i','n','u','x'};

例如:

char word[5][10] = { "cache",
                     "intel",
                     "ethernet",
                     "gigabyte",
                     "linux" };

然后你可以写例如

    if (inputchar == word[i][input])
        ...
于 2012-11-21T17:54:42.853 回答
1

最简单的解决方法是数组数组:

char word[][9] = {"cache", "intel", "ethernet", "gigabyte", "linux"};

这声明word为 9 元素数组的 5 元素数组char;5 由初始化程序中的项目数确定,9 需要保存最长的字符串(8 个字符加上 0 终止符)。

这确实意味着第一个、第二个和第五个字符串中有一些未使用的空间,但对于这样的练习来说,这可能没什么大不了的。如果您要处理数千个字符串,最好声明一个指针数组,然后分别分配每个字符串,以便您只使用每个字符串所需的内存:

char *word[N]; // for N strings;
...
word[i] = malloc(length_of_string_for_this_element + 1);
if (word[i])
  strcpy(word[i], string_for_this_element);

完成后,您需要为每个单词释放内存:

for (i = 0; i < N; i++)
  free(word[i]);

无论哪种方式,您都可以访问特定字符

word[i][input]
于 2012-11-21T18:29:22.680 回答
0

如果您不需要修改项目,也许您可​​以使用它(指针数组)。

const char *words[ 5 ] = { "cache", "intel", "ethernet", "gigabyte", "linux" };

这是它的工作原理:

这个怎么运作 在此处输入图像描述

这是 Deitel & Deitel 的 C, How to Program 中的一个示例。

于 2012-11-21T17:56:07.437 回答