Алфавитные слова в предложении в C? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь взять слова в предложении и расположить их в алфавитном порядке. он должен уметь различать прописные и строчные буквы, но у меня возникают проблемы с тем, чтобы он делал только строчные буквы.

Если я введу по одному слову за раз, он будет алфавитизирован, но после ввода нескольких слов это будет странно. Если я введу "i need help", я ожидаю получить "i deen ehlp"; вместо этого я получаю "i dnee ehlp"

Вот мой код:

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

int main (void) 
{
    int i, j, k, l=0, m=0, s=0, N=100;

    printf("input a sentence with no more than 100 characters \n");
    char sentence[N];
    scanf("%[^\n]s", sentence);
    int slength=strlen(sentence);

    printf("Sentence before sorting - %s \n", sentence);
    /*capital string keeps track of position of capital letters*/
    int capital[slength];

    for (i = 0; i < slength-1; i++) 
    {
        for (j = i+1; j < slength; j++) 
        {
        /*make uppercase letters lowercase */
        if (sentence[j-1] <=90 && sentence[j-1]>64)
        {
            capital[l]=i;
            sentence[i]=sentence[i]+32;
        }
        /* skip to next word if a space is detected */
        if(sentence[j]==' ')
        {
            i=j+1;
            j=j+2;
        }
        /*alphabetize loop*/
        if (sentence[i] > sentence[j])
        {
            k = sentence[i];
            sentence[i] = sentence[j];
            sentence[j] = k;
        }
        }   
    }

    printf("Sentence after sorting  - %s \n", sentence);
    return 0;
}

1 Ответ

0 голосов
/ 03 января 2019

Это очень простое решение.

#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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...