Я написал такой фрагмент кода:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int compare_str(const void* a, const void* b)
{
char * const * aa=a;
char * const * bb=b;
return strcasecmp(*aa, *bb);
}
int sort_alphabetically(char tab[])
{
if(strlen(tab)<1 || tab[strlen(tab)-1]=='\n')
{
return 1;
}
for(unsigned int i=0; i<strlen(tab); i++)
{
if(tab[i]=='-')
{
return 1;
}
}
int spaces_count=0;
int first=0;
int ch=0;
for(unsigned int i=1; i<strlen(tab); i++)
{
if(tab[i]!=' ')
first=1;
if(tab[0]==' ' && tab[1]==' ')
ch=1;
if(tab[i]==' ' && tab[i+1]>=33 && tab[i+1]<=126 && first==1)
spaces_count++;
}
int words_count=spaces_count+1;
char **words=malloc(words_count * sizeof(char*));
char *pch;
int word_idx=0;
pch=strtok(tab, " ");
while(pch!=NULL)
{
words[word_idx++]=strdup(pch);
pch=strtok(NULL, " ");
}
qsort(words, words_count, sizeof(char*), compare_str);
for(int i=0; i<words_count; i++)
{
for(unsigned int j=0; j<strlen(words[i]); j++)
{
if(ch==0)
*(tab++)=words[i][j];
else
if(words[i][j]!=' ')
{
*(tab++)=words[i][j];
ch=0;
}
}
if(i!=words_count-1)
*(tab++)=' ';
else
*(tab++)='\0';
free(words[i]);
}
free(words);
for(unsigned int i=0; i<strlen(tab); i++)
if(tab[i]==' ' && tab[i+1]==' ')
tab[i]='\0';
return 0;
}
int main()
{
char input[1000];
printf("Enter text: ");
if(fgets(input, 1000, stdin))
{
if(input[strlen(input)-1]=='\n')
input[strlen(input)-1]='\0';
if(sort_alphabetically(input))
{
fprintf(stderr, "Incorrect input data");
return 2;
}
else
printf("%s", input);
}
return 0;
}
Он сортирует слова в алфавитном порядке, введенные пользователем.Дело в том, что это делает работу, но я также хотел бы проверить, совпадают ли слова.Если они состоят из слова с первой заглавной буквой, то должны стоять перед словом с первой маленькой буквой.Пример:
Введите текст:
ТЕХНОЛОГИЯ И ОБУЧЕНИЕ НАМ, ЧТОБЫ БЫТЬ ЧЕЛОВЕКОМ ОСНОВНОЕ ОБЕСПЕЧЕНИЕ ЕСТЬ
Выход должен быть:
АГАИНСИМОСТЬ Будь человеком ЕСТЬ ОБУЧЕНИЕ ОБУЧЕНИЮ ТЕХНОЛОГИИ ДЛЯ НАС
Но это:
АГАИНСИМОСТЬ Будь человеком Я ЕСТЬ ОБЕСПЕЧЕНИЕ ОБУЧЕНИЯ ТЕХНОЛОГИИ НАС
Что меняетсяя должен сделать?