Разделение и лексическое упорядочивание строк - PullRequest
0 голосов
/ 06 марта 2019

Я должен создать функцию, которая будет печатать каждое слово из строки в новую строку, но она также должна быть отсортирована по лексикографически, и это то, где я в тупике.Я знаю, как сортировать лексикографически, если каждое слово было введено пользователем вручную (scanf()), но если я использую свое собственное строковое предложение, я теряюсь, как начать это.Я знаю, что я должен использовать strcmp(), когда дело доходит до сравнения строк, но как мне сравнить каждое слово, когда строка «выложена так»?

Это то, что у меня так далеко:

#include <stdio.h>
#include <string.h>

void ParseSentence ( char string[] );

int main()
{
    char s[100];

    strcpy ( s , "hello world, how are you today.");

    printf("%s\n", s);

    ParseSentence ( s );
}

/*Objective: Isolates the words in a string, printing them on separate lines 
and omitting any deliminators*/
/*Input: A string of choice is passed as a character array*/
/*Output: void*/ 
void ParseSentence( char string[])
{
    char *tokenPtr, *DelimList = ", ;.";

    tokenPtr = strtok(string, DelimList);

    while (tokenPtr != NULL)
    {
        printf("%s \n", tokenPtr);
        tokenPtr = strtok(NULL, DelimList);
    }

    return;
}

1 Ответ

0 голосов
/ 06 марта 2019

Создайте массив «строк» ​​(то есть указателей на массивы символов) и отсортируйте массив с помощью qsort.Затем вы можете распечатать его по порядку.

Вы можете заполнить свой массив указателями, возвращенными из strtok;нет необходимости копировать слова.Но учтите, что strtok уничтожит строку, переданную в качестве аргумента, поэтому было бы неплохо скопировать эту строку перед тем, как высвободить strtok.Это позволит вам определить вашу функцию, чтобы она принимала аргумент const char*, позволяя вам вызывать ее со строковым литералом.В целом, лучше проектировать интерфейс, чтобы всегда использовать const char* в качестве прототипа для функции, принимающей строку (если целью функции не является изменение строки.)

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