簡體   English   中英

分離和按詞法排序字符串

[英]Separating and lexically ordering strings

我應該創建一個將每個單詞從字符串打印到新行的函數,但也應該按照字典順序對其進行排序,這就是我的困擾。 如果用戶手動輸入了每個單詞( 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;
}

創建一個“字符串”數組(即,指向char數組的指針),然后使用qsort對數組進行排序。 然后您可以按順序打印它。

您可以使用strtok返回的指針填充您的服務; 無需復制單詞。 但是請注意, strtok將破壞作為參數傳遞的字符串,因此在釋放strtok之前復制該字符串可能是一個好主意。 這樣一來,您就可以定義函數以使用const char*參數,並允許您使用字符串文字對其進行調用。 通常,更好的接口設計是始終使用const char*作為采用字符串的函數的原型(除非該函數的目的是修改字符串)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM