gpt4 book ai didi

c - C 中是否有等效于数组的 indexOf?

转载 作者:太空狗 更新时间:2023-10-29 16:08:39 25 4
gpt4 key购买 nike

我是 C 的新手,希望有内置的东西可供我使用。假设我有一个列表,我想找到列表的位置(列表中的所有项目都是唯一的)。像这样:char *name[] = {"monkey", "pig", "goat", "dog", "cat"}; 我试过:

   char *name[] =  {"monkey", "pig", "goat", "dog", "cat"};
int *found = strstr (*name,"dog");
printf("Found at %i \n", found); //expect 3(or 4, if it doesn't use 0s) result

但它一直给我结果 2(即使我输入了不存在的名称)。我用 strcspn 交换了 strstr 也没有运气。

我问是因为我不确定,我创建了自己的函数来执行此操作,但它非常糟糕且不太灵活(我在其中硬编码了列表名称),我想如果 C 中有一些东西,那么它会对我更好。这是我做的功能(如果你不想失去脑细胞阅读它,请遮住你的眼睛,开玩笑:-):

int indexOf(char nameToFind) {
//returns the location of an item in a list
int pos = -1;
int i;
for (i = 0; i < sizeof(name) / sizeof(name[0]) && pos == -1; i++)
{
// Assuming there is a char[] field called name in Stdinfo
if (*name[i] == nameToFind) {
pos = i;
}
}
return pos;
}

C 中是否存在这样的东西,它比我的版本更快、更灵活?

最佳答案

您编写的代码在几个层面上是错误的。你的线路

char *name[] = {"monkey", "pig", "goat", "dog", "cat"};

创建一个 char 指针数组,每个指针指向一个以 NULL 结尾的字符串。到目前为止,一切都很好。然而,你的行

int *found = strstr (*name,"dog");

found 设置为指向 *name = name[0] = "monkey" 中第一次出现的 "dog" 的指针。除了不按预期查看数组 name 之外,您还将 strstr 返回的 char * 分配给 int * 。不好。你的下一行

printf("Found at %i \n", found);

尝试打印found,但说明符需要一个int,而您传递给它的是found,一个int *。这些都是要避免的事情,我认为其中很多是未定义的行为。

你想要的是一个使用strcmp的循环,例如:

char *name[] = {"monkey", "pig", "goat", "dog", "cat"};
unsigned int numElements = sizeof(name)/sizeof(name[0]);
unsigned int i;
for(i = 0; i < numElements; ++i) {
if (strcmp(name[i], "dog") == 0) {
printf("Found at %u\n", i);
break;
}
}
if (i >= numElements) {
printf("Not found\n");
}

如果将数组传递给函数,以这种方式计算 numElements 将不起作用,因此在这种情况下,您必须明确传递元素的数量。

关于c - C 中是否有等效于数组的 indexOf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com