2015-03-03 3 views
-5

Я пытаюсь создать программу, которая может определить, являются ли два введенных слова анаграммами друг друга.Как проверить, являются ли два слова анаграммами в c

Способ, которым мне было сказано, чтобы мой учитель мог рассчитать, сколько из первой буквы одного слова есть, затем сравнить с другим, а затем повторить остальные буквы. Поэтому, если слово доходит до конца, тогда он считает их анаграммами. Однако это все, что он мне помог, и я действительно борюсь с этой проблемой.

Программа требуется печатать ли они или нет анаграммы, как это так,

Success! "Carthorse" and "Orchestra" are anagrams! 

Edit: Спасибо, ребята за все ваши ответы, в то время как я понимаю всю идею позади них, я нахожу его очень трудно помещать их в код, сможет ли кто-нибудь просто написать аннотированный код для меня? Это не домашнее задание или что-то еще, это просто личный проект.

+5

сортировать и сравнивать – Ksv3n

+0

http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list для краткого начала вам понадобится массив –

+0

Еще один способ - выделить карту (а точнее массив) каждого символа к его счету. Увеличьте его для первого слова, уменьшите на второе, если оно закончится во всех нулях, у вас есть анаграмма. Преимущество - предсказуемое время выполнения, но вы тратите некоторую память. – tux3

ответ

0

Преобразование обеих строк в строчные буквы.

Создайте два массива из 26 символов для букв алфавита.

Пропустите каждую строку, подсчитывая буквы и увеличивая соответствующий элемент в массивах алфавита.

Затем сравните два массива алфавита, и если они равны для каждого символа, ваши строки являются анаграммами.

+0

Спасибо за быстрый ответ! Да, все имеет смысл, но моя проблема в том, что я действительно борется с тем, чтобы все это превратилось в реальный код и реализовало его. – Danthescotman

+0

@ Ответ Dan BethCrane выше - правильный путь для работы. Это более подробная и более элегантная версия моего ответа (использует меньше места для хранения). – Alan

1

Звучит так, будто вы новичок в C! Welcome :)

Задачи вроде этого могут казаться сложными, поэтому первый шаг, который я сделал бы здесь, - это разбить его на шаги, которые вы можете сделать для Google. Итак:

«посчитать, сколько из первой буквы одного слова есть, то по сравнению с другой, а затем повторить для остальной части буквы»

  1. Распознать слова/создавать переменные из них
  2. Создать массив длиной 26, чтобы сохранить каждую букву алфавита
  3. Loop через первое слово и для каждой буквы, добавьте в правильный индекс массива (а = 0, т = 12, и т.д.) например

    int index = string [i] - 'a'; // Это вычитает значение ascii из буквы, получая a = 0 и т. Д. letterCounts [index] ++; // или letterCounts [index] -;

  4. Loop через второе слово, и для каждой буквы, вычесть один из индекса массива

  5. Если в конце любой индекс не 0, это не анаграмма.
+0

Спасибо за быстрый ответ, и да, я очень новый. Я понимаю шаги 1,2 и 5, но 3 и 4, я не уверен, как реализовать - кто-то хочет разработать? – Danthescotman

+0

Вам понадобится что-то подобное http://stackoverflow.com/questions/3213827/how-to-iterate-over-a-string-in-c, чтобы прокрутить строки. Я отредактировал выше для массивов –

0

1) Преобразуйте обе строки в нижний регистр по мере необходимости (используйте от ctype.h).

2) Сортировка каждой строки, например., С помощью qsort из stdlib.h:

static int cmp(const void *a, const void *b) { return *(char *)a - *(char *)b; } 

qsort(str1, strlen(str1), 1, (cmp)); 
qsort(str2, strlen(str2), 1, (cmp)); 

3) Сравнить отсортированные строки с strcmp из string.h - если они равны, они анаграммы, в противном случае нет.

+0

Это, вероятно, решение с наименьшим количеством кода, который вам нужно написать на C. Теоретически другое предлагаемое решение подсчета появления букв происходит быстрее, но это не имеет практического значения, когда строки имеют длину менее сотни тысяч символов. Если это домашняя работа, попробуйте оба решения, чтобы вы узнали, как это сделать самостоятельно и как использовать библиотечные функции (также попробуйте реализовать простой алгоритм сортировки, например сортировку сортировки или сортировку вставки, и замените библиотеку 'qsort' на нее). – Arkku

Смежные вопросы