Отсортировать буквы всех слов по алфавиту - 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;
}