Найти все согласные буквы которые входят только в одно слово

В общем у меня есть std::vector строк,в нем мне нужно найти согласные буквы которые входят только в одно слово,не могу понять как решить такое задание пробую через std::set и std::multiset и ничего не получаеться,помогите пожалуйста

Так же уточнение что буквы латинские,допустим есть строки "aaaa" "iia" В результате должно выводиться только 'i' так как буква 'а' входит в два слова

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


Ответы (2 шт):

Автор решения: CHICOTILA
#include <iostream>

using namespace std;

int main() {
    string str, symBig = "BCDFGHJKLMNPQRSTVWXYZ", symSmall = "bcdfghjklmnpqrstvwxyz";
    cin >> str;
    int count = 0;
    int d = 0;
    for (int i = 0;  i < symBig.length(); ++i) {
        for ( int j = 0; j < str.length(); ++j) {
            if (str[j] == symBig[i] || str[j] == symSmall[i]) count++;
            if (count > 1) {
                count = 0;
                break;
            }
        }
        if (count == 1) {
            cout << symSmall[i];
            break;
        }
    }
    return 0;
}
→ Ссылка
Автор решения: Slava

Создаете массив, в котором для каждой согласной буквы храните количество слов, в которых она встречалась, назовем его wordsCount. Далее для каждого слова:

  • сортируете буквы
  • убираете дупликаты
  • убираете гласные

Теперь для каждой оставшейся буквы увеличиваете счетчик в wordsCount.

В конце в wordsCount ищете елемент со значением 1 - индекс это нужная буква.

Примерно может выглядеть вот так:

int wordsCount[26] = {};

std::vector<std::string> words;
// наполнение массива words
for( auto &word : words ) {
   auto beg = word.begin();
   auto end = word.end();
   std::sort( beg, end );
   end = std::unique( beg, end ); // удаляем дупликаты
   end = std::remove_if( beg, end, []( char c ) { // удалем гласные
      return c == 'a' or c == 'e' or c == 'i' or c == 'o'
             or c == 'u' or c == 'y';
   } );
   for( auto it = beg; it != end; ++it ) 
       wordsCount[*it-'a']++;
}

Поиск элемента со значением 1 я оставлю для автора.

→ Ссылка