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, какой дистрибутив?
|
|
| |