在数组名中使用int counter

时间:2012-11-21 17:49:23

标签: c arrays int

在C中我想知道我是否可以使用int作为计数器从我的数组列表中选择一个数组。如果不是,你会怎么建议绕过这个?对不起,代码可能会更好地解释它:

编辑:对不起我应该澄清说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");
    }
}

5 个答案:

答案 0 :(得分:3)

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

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

由于您的数组不是以字符结尾的,因此您还需要知道它们的长度,并且您无法从words访问它:

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

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

答案 1 :(得分:1)

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

char* words[5];

然后分配单个字符串:

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

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

words[i][input]

答案 2 :(得分: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])
        ...

答案 3 :(得分:1)

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

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

这将word声明为{-1}}的9元素数组的5元素数组; 5是根据初始化程序中的项目数确定的,9需要保存最长的字符串(8个字符加0终结符)。

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

char

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

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]);

答案 4 :(得分:0)

也许你可以使用它(一系列指针),如果你不需要修改这些项目。

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

这是它的工作原理:

How it works enter image description here

这是一个来自C的例子,如何由Deitel&amp;的Deitel。