Нормализуйте пробелы с помощью strtok в C

Я пытаюсь использовать strtok для нормализации пробелов в строке после удаления подстроки. Иногда, когда я удаляю подстроку, между двумя словами будет 2 пробела, и я хочу уменьшить их до 1, например, удаление подстроки «подъем и» из строки «взлет и падение Рима» оставляет 2 пробела между и падение .

Это то, что у меня есть до сих пор, но у меня нет опыта работы с strtok:

char *strdel(char *string, const char *substring) {
    int mainlen, sublen;

    // finds the first occurrence of the substring
    char *del_sub = strstr(string, substring);
    char *wspc, *df;

    while (del_sub != NULL) {
        // finds length of string from beginning of substring
        // found in main string
        mainlen = strlen(del_sub);

        // finds length of the substring
        sublen = strlen(substring);

        // removes the number of bytes needed after the
        // first instance of the substring
        memmove(del_sub, del_sub + sublen, strlen(del_sub));     

        wspc = strtok(string, "  ");

        while ((df = strtok(NULL, "  ")) != NULL) {
            strcat(string, df);
            memset(df, 0, strlen(df));
        }

        // continues to search for another occurrence of the
        // substring until it equals NULL
        del_sub = strstr(string, substring);
    }

    return(string);
}

person CodeNewbie    schedule 28.10.2014    source источник
comment
Вы проделали хорошую работу, предоставив краткий пример кода (хотя обратите внимание, что было бы идеально, если бы вы могли ограничить ширину столбца, а также количество строк; я так и сделал). И вы четко определили свою цель. Но что вы не дали понять, так это то, что вы попали в точку преткновения. Какая строчка вас смутила? Когда вы запускаете отладчик на простых примерах... даже таких простых, как удаление a из (space)a(space), где ваш блок? Лучше показать доказательства попытки отладки вместо отладки моего кода и объяснить, что именно вы не понимаете.   -  person HostileFork says dont trust SE    schedule 28.10.2014
comment
stackoverflow.com/a/8463664/971127   -  person BLUEPIXY    schedule 28.10.2014
comment
От wspc = strtok... до цикла while с (df = strtok... - это моя попытка найти и удалить пробел, когда между буквами более 1 пробела, и именно с этим у меня возникла проблема. Я может удалить подстроку в порядке, но я изо всех сил пытаюсь собрать алгоритм для поиска двойных пробелов, а затем удалить только одно из них.   -  person CodeNewbie    schedule 28.10.2014
comment
Кроме того, я попытался использовать isspace(), что, я думаю, тоже можно сделать, но я не смог придумать алгоритм и для этого.   -  person CodeNewbie    schedule 28.10.2014
comment
stackoverflow.com/q/16790227/971127   -  person BLUEPIXY    schedule 28.10.2014
comment
Спасибо, что опубликовали это дважды, потому что я не видел этого в первый раз, а также я явно недостаточно хорош в поиске помощи самостоятельно.   -  person CodeNewbie    schedule 28.10.2014
comment
Я бы предложил использовать strtok, то есть токенизатор строк, а затем объединить и составить строку, что вам нужно, путем объединения строк. просто еще одна работа вокруг.   -  person Aunn Raza    schedule 28.10.2014