Четверг, 28 Марта 2024, 21:42

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Анаграммы си (не могу решить задачу)
Анаграммы си
Bazilik_xDДата: Вторник, 28 Мая 2013, 14:22 | Сообщение # 1
был не раз
Сейчас нет на сайте
вот текст задания

Цитата
Дан массив строк. Вывести на экран все слова, являющиеся анаграммами.
Анаграммами называются слова, состоящие из одинаковых букв, отличающихся лишь порядком их следования. Например: автор – товар – отвар – тавро – …; апельсин – спаниель.
Для поиска анаграмм нужно произвести следующие действия:
отсортировать буквы всех слов по алфавиту;
реализовать функцию сравнения строк;
отсортировать слова с сортированными буквами по алфавиту. Для этого нужно создать массив индексов и при сортировке переставлять элементы в массиве индексов, не изменяя массив слов;
просмотреть массив строк в порядке, указанном в массиве индексов, повторяющиеся слова напечатать в первоначальном виде. Слова-анаграммы печатаются в строчку (таких слов может быть два и более).


Все перепробывал, не получается(( помогите пожалуйста. Буду очень признателен((


TiendilДата: Вторник, 28 Мая 2013, 17:05 | Сообщение # 2
участник
Сейчас нет на сайте
Пробуй ещё! Ты программист или плакса?!

Что конкретно не получается?


Участвовал в разработке Order of War (C++ UI & логика) и WoT (Python портал worldoftanks.ru почти всё :-) )

Текущий проект: the-tale.org - indie mmozpg
Revolver_45Дата: Среда, 29 Мая 2013, 13:52 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Написал на скорую руку.
Но это, на самом деле, получилось очень громоздко и грязно.
Возможно, дома перепишу изящней.

Но, пока так сказать главное работает! :-)
По своим ощущениям, скажу честно, что это ХРЕНОВЫЙ код. В практических целях не сгодится. А если сдать лабу, то вполне.

Код
#include <stdio.h>
#include <stdbool.h>
#define MAXLENGTH 20
#define SIZE 20

void sort (char sorted[SIZE][MAXLENGTH]) {
  int i, j, k;
  char temp;

  for (i = 0; i < SIZE; i++) {
   for (j = 0; sorted[i][j] != '\0'; j++) {
    for (k = j + 1; sorted[i][k] != '\0'; k++)
     if (sorted[i][j] > sorted[i][k]) {
      temp = sorted[i][j];
      sorted[i][j] = sorted[i][k];
      sorted[i][k] = temp;
     }
   }
  }
   
  return;
}

bool strEq (char a[MAXLENGTH], char b[MAXLENGTH]) {
  int i;
  for (i = 0; i < MAXLENGTH; i++) {
   if (a[i] != b[i]) return false;
   else if (a[i] == '\0') return true;
  }
}

void anagr (char sorted[SIZE][MAXLENGTH], char *words[]) {
  char *pw;
  int i, j;
  bool checked[SIZE] = {false}, ep = false, eq = false;

  for (i = 0; i < SIZE - 1; i++) {
   if (checked[i]) continue;
   checked[i] = true;
    
   for (j = i + 1; j < SIZE; j++) {
    if (checked[j]) continue;
    ep = strEq(sorted[i], sorted[j]);
    if (ep) {
     eq = true;
     printf("%s ", words[j]);
     checked[j] = true;
    }
   }
   if (eq) printf("%s\n", words[i]);
   eq = false;
  }

  return;
}

int main (void) {
  char *words[SIZE] ={
   "how",
   "who",
   "left",
   "felt",
   "master",
   "happy",
   "cans",
   "war",
   "scan",
   "cloud",
   "keyboard",
   "disk",
   "kids",
   "baby",
   "mother",
   "mono",
   "peace",
   "pale",
   "woman",
   "moon"
  };
  char sorted[SIZE][MAXLENGTH];
  int i,k;
  char *j;

  for (i = 0; i < SIZE; i++) {
   for (j = words[i], k = 0; *j != '\0', k < MAXLENGTH; j++, k++)
    sorted[i][k] = *j;
  }
  sort(sorted);
  anagr(sorted, words);
   
  return 0;
}




rtytyrtyr
SnickДата: Среда, 05 Июня 2013, 01:22 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Сорри за некропост. Revolver_45, какой дистрибутив?
Форум игроделов » Программирование » C/C++ » Анаграммы си (не могу решить задачу)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг