Отсортировать буквы всех слов по алфавиту - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан массив строк. Вывести на экран все слова являющиеся анаграммами. Анаграммами называются слова, состоящие из одинаковых букв, отличающихся лишь порядком следования. Например: автор-товар-отвар-тавро-…; апельсин — спаниель. Для поиска анаграмм нужно сделать следующее: 1. отсортировать буквы всех слов по алфавиту (сохранив начальный массив). 2. реализовать функцию сравнения строк. 3. отсортировать слова с сортированными буквами по алфавиту. Для этого нужно создать массив индексов и при сортировке переставлять элементы в массиве индексов, не изменяя массив слов. 4. просмотреть массив строк в порядке, указанном в массиве индексов, повторяющиеся слова напечатать в первоначальном виде. Слова-анаграммы печатаются в строчку (таких слов может быть 2 и больше). 5.
main() {
    char str,s,*a[]={"stop","avtor","leto"};
    int i,x;
    for(i=0;i<3;i++)
    printf("%s",a[i]);
    for (i=0;i<3;i++)
    {
        str=a[i];
        x=sizeof(str);
        for(i=1;i<x;i++)
Короче у меня встал вопрос с чем сравнивать буквы чтобы их отсортировать?

Решение задачи: «Отсортировать буквы всех слов по алфавиту»

textual
Листинг программы
#include <string.h>
#include <stdio.h>
int findAnagr(char b[200]){
    int i,j,ind,n=0;
    char a[200],*token;
    strcpy(a,b);
    token=strtok(a," ");
    while(token!=NULL){
        n++;
        ind=0;
        for(i=0;i<200-strlen(token);i++){
            for(j=0;j<strlen(token);j++){
                if(token[j]!=a[j+i])break;
            }
            if(j==strlen(token))ind++;
        }
        if(ind>1){
            printf("%d-ое слово Анагр...четотам\n",n);
        };
        token=strtok(NULL," ");
    }
        
    return 0;
} 
 
int main() {
        char str[200],s,a[200],*token;
    char b[200];
    memset(a,'\0',200);
    memset(b,'\0',200);
    printf("\nВведите строку\n");
    gets(a);
        int n,i,j;
        while(1)
        {
        if(strlen(b)==0){
            if((token=strtok(a," ,."))==NULL)break;
        }else
        if((token=strtok(NULL," ,."))==NULL)break;
        sprintf(str,"%s",token);
                n=strlen(str);
                for(i=0;i<=n-1;i++)
                        {
                        for(j=i;j<n;j++)
                                {
                                        if(str[i]>str[j])
                                        {
                                          s=str[i];
                                          str[i]=str[j];
                                          str[j]=s;
                                         }
                                }
                        }
 
        sprintf(b+strlen(b),"%s ",str);
 
    }
    printf("%s\n",b);
    findAnagr(b);
        return 0;
        
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.667 из 5
Похожие ответы