C Быстрая сортировка, игнорировать первый символ в строке? - PullRequest
0 голосов
/ 20 марта 2020

Я быстро сортирую массив структур, и эта структура имеет символ * с именем ProcessName. Теперь я отсортировал его в алфавитном порядке, используя Qsort, используя мою функцию сравнения, однако, если ProcessName начинается с (он не будет сортироваться правильно.

, например, "(s sh)" должно быть после "bash" однако из-за того, что круглые скобки являются первым символом, круглые скобки стоят перед bash, когда должны учитываться только буквы после скобок.

Теперь у меня есть представление о том, как это будет работать, проверьте, первый символ - «(», затем увеличивайте строку, но это привело к некоторым проблемам с указателем.

Вот моя функция сравнения

int compare(const void *p1, const void *p2) {
    const process *first = p1;
    const process *second = p2;
    return strcmp(first->Processname, second->Processname);
}

1 Ответ

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

Проверьте, является ли первый символ любой из строк (. Если это так, увеличьте указатель, чтобы пропустить его.

int compare(const void *p1, const void *p2) {
    const process *first = p1;
    char *name1 = first->Processname;
    if (name1[0] == '(') {
        name1++;
    }
    const process *second = p2;
    char *name2 = second->Processname;
    if (name2[0] == '(') {
        name2++;
    }
    return strcmp(name1, name2);
}

Для более общего способа перехода к первой букве используйте strcspn().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...