Определение букв в слове. C++

156
01 апреля 2019, 08:30

По заданию нужно определить, сколько вариантов анаграмм можно составить из букв, содержащихся в слове, которое ввёл пользователь. Букв может быть не более 12. Я это реализовал через strlen и факториал количества букв, сама программа достаточно простая (приложил скрин). Я не учёл того,что в слове могут быть одинаковые буквы, нужно считать их за одну. Вопрос, как можно определить, есть ли в слове одинаковые буквы и сколько их? Так же компилятор на телефоне считает одну русскую буквы за две, с латинскими же все норм. Хелп, плз.

Answer 1

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

Пример кода:

#include <iostream>
#include <string>
#include <algorithm>
int main()
{
    std::string str = "abbA";
    std::transform(str.begin(), str.end(), str.begin(), ::tolower); // Переводим всю строку в нижний регистр
    std::sort(str.begin(),str.end()); // Сортируем
    str.erase(std::unique(str.begin(), str.end()), str.end()); // Убираем повторяющиеся элементы
    std::cout << str.length(); // Выводим количество букв
}

Вы можете проверить эту программу здесь: http://cpp.sh/3e4nf

При использовании русских символов в строке программа не работает. Как это исправить пока не представляю.

Answer 2

Как вариант можно так.

unordered_set<char> set;
for (auto a:word)
    set.insert(a);
auto numOfUniqueElem=set.size();

Вот таким образом получили количество букв без повторов. P.s пишу с телефона так что где то мог ошибится в синтаксисе

READ ALSO
Размер переменных в функциях

Размер переменных в функциях

Почему под параметр-переменную функции выделяется 4 байта оперативной памяти, если тип short (2 байта)?

258
Построить график функции с++ (WinAPi)

Построить график функции с++ (WinAPi)

Стоит задача:построить график функции на координатной плоскости при помощи WInApiС WinApi сталкиваюсь первый раз

224
Как изменить свойства файла С++

Как изменить свойства файла С++

Нужно удалять файлы, в том числе и файлы "Только чтение"Если в свойствах стоит галочка "Только чтение", то через remove() удалить не получается

169