Определите, какой символ * самый короткий без стр - PullRequest
0 голосов
/ 11 июля 2019

У меня есть два разных char *, char *string1, которые постоянны, и char *string2, которые могут меняться.Я извлекаю char *string2 из списка.

Я хочу найти длину самого короткого char *, чтобы использовать его в:

strncmp(string1, string2, shortest);.

Это будет в цикле while, как показано ниже:

...
int shortest;
while (string2) {
    // get the length of the shortest char *
    if (!strncmp(string1, string2, shortest))
        break;    
    string2 = list_next(list); // Returns NULL if there is no elements left
}
...

Я не могу использовать strlen(const char *s), потому что он слишком медленный для моего сценария использования.

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Создать структуру, которая содержит указатель и длину. Затем вы предварительно рассчитали длину и убедитесь, что она выполняется быстро.

Еще лучшая идея - использовать чужую библиотеку строк, которая уже делает это для вас. Помимо вычисления длины строки, большинство библиотек значительно улучшают безопасность буфера C, избегая стандартных операций с строками.

1 голос
/ 11 июля 2019

Для конкретного случая strncmp вы могли бы самостоятельно реализовать функцию сравнения, чтобы вернуть желаемый результат, например ::100100

bool strprefixeq(const char *a, const char *b) {
    while (*a && *b) {
        if (*a++ != *b++) {
            return false;
        }
    }
    return true;
}

(Конечно, если у вас есть другие потребности в длине строки, лучше предварительно рассчитать и сохранить ее, как предложено.)

...