C语言 获取定义为uint8的字符串数组中特定字符串的索引

zsbz8rwp  于 2023-11-16  发布在  其他
关注(0)|答案(2)|浏览(163)

我有以下案例:
数组定义为无符号整数:

uint8 myArray[6][10] = {"continent","country","city","address", "street", "number"};

字符串
现在我想获取字符串“city”的索引。我想这样做:

uint8 idx;

for(idx = 0; idx < sizeof(myArray)/sizeof(myArray[0];i++))
{
    if((myArray[idx]) == "city")   // This can not work because the array is an uint8 array
    {
         /*idx = 2 ....*/
    }
}


不使用string.h中的函数(如strcpy等)的正确方法是什么?

z0qdvdin

z0qdvdin1#

正如其他人指出的那样,你不能用相等运算符=比较两个C字符串,相反,你需要使用strcmp,因为你不允许使用它,你需要自己实现它。
这里strcmp in glibc的实现
所以你的代码可以是这样的:

int mystrcmp(const uint8 *s1, const uint8 *s2)
{
    uint8 c1, c2;
    do
    {
        c1 = *s1++;
        c2 = *s2++;
        if (c1 == '\0')
            return c1 - c2;
    }
    while (c1 == c2);
    return c1 - c2;
}
....
uint8 *str = "city";
size_t size = sizeof(myArray) / sizeof(myArray[0]);
size_t idx;

for (idx = 0; idx < size; i++)
{
    if (mystrcmp(myArray[idx], str) == 0)
    {
        break;
    }
}
if (idx == size)
{
    printf("'%s' was not found\n", str);
}
else
{
    printf("'%s' was found at index %zu\n", str, idx);
}

字符串

2wnc66cl

2wnc66cl2#

您需要逐个字符地比较字符串。
为此,您编写了一个循环,从第一个字符开始,直到它在任一字符串中找到一个不匹配的字符或字符串结束标记,无论哪个先出现。

相关问题