Получить индекс указанной строки c в массиве строк, который определен как uint8 - PullRequest
0 голосов
/ 06 марта 2020

У меня есть следующий случай:

Массив определяется как целое число без знака:

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 et c ...

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Вам нужно сравнивать строки посимвольно.

Для этого вы пишете al oop, начиная с первого символа, пока не найдете несоответствующий символ или маркер конца строки в любом из них. Строка, что когда-либо на первом месте.

Поскольку это звучит как домашнее задание, я не буду публиковать код.

1 голос
/ 06 марта 2020

Как отмечают другие, вы не можете сравнивать две строки C с оператором равенства =, вместо этого вам нужно использовать strcmp, и, поскольку вы не можете использовать его, вам нужно реализовать его самостоятельно.

Здесь реализация strcmp в glib c

Таким образом, ваш код может выглядеть примерно так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...