在C语言中按字母顺序排列单词?

时间:2019-01-03 16:24:07

标签: c

我正在尝试将一个句子中的单词并按字母顺序排列。它必须能够区分大写和小写字母,但是我很难让它只写小写字母。

如果我一次输入一个单词,它将按字母顺序排列,但是一旦我输入多个单词,它的表现就会很奇怪。如果我输入class A; bit i; function void method; i = 1; this.i = 2; endfunction endclass ,我希望收到"i need help";相反,我收到"i deen ehlp"

这是我的代码:

"i dnee ehlp"

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的解决方案。

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

int letter_sort(const void* a, const void* b)
{
    return tolower(*(const char*)a) - tolower(*(const char*)b);
}

char* sentence_sort(char* s)
{
    char _[strlen(s)+1];
    strcpy(_,s);

    for(char* w = strtok(_, " ."); w; w = strtok(NULL, " ."))
    {
        qsort(w, strlen(w), !!w, letter_sort);
        memcpy(s+(w-_), w, strlen(w));
    }
    return(s);
}


int main(void) {
    char sent[101];

    printf("Input a sentence with no more than 100 characters \n");
    scanf("%[^\n]", sent);

    printf("Sentence before sorting: %s\n", sent);
    printf("Sentence after  sorting: %s\n", sentence_sort(sent));

    return 0;
}

输出

Success #stdin #stdout 0s 9424KB
Input a sentence with no more than 100 characters 
Sentence before sorting: The quick Brown fox Jumped over the Lazy Dogs.
Sentence after  sorting: ehT cikqu Bnorw fox deJmpu eorv eht aLyz Dgos.