分离和按词法排序字符串

时间:2019-03-06 00:35:09

标签: c

我应该创建一个函数,该函数可以将字符串中的每个单词打印到新行,但是也应该按字典顺序进行排序,这就是我的困惑所在。如果用户手动输入了每个单词(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 :(得分:0)

制作一个“字符串”数组(即,指向char数组的指针),并使用qsort对数组进行排序。然后您可以按顺序打印它。

您可以使用strtok返回的指针来填充您的服务;无需复制单词。但是请注意,strtok将破坏作为参数传递的字符串,因此在释放strtok之前复制该字符串可能是一个好主意。这样一来,您就可以定义函数来接受const char*参数,并允许您使用字符串文字对其进行调用。通常,最好始终使用const char*作为带有字符串的函数的原型(除非该函数的目的是修改字符串)作为接口设计。