Найти все согласные буквы которые входят только в одно слово
В общем у меня есть std::vector строк,в нем мне нужно найти согласные буквы которые входят только в одно слово,не могу понять как решить такое задание пробую через std::set и std::multiset и ничего не получаеться,помогите пожалуйста
Так же уточнение что буквы латинские,допустим есть строки "aaaa" "iia" В результате должно выводиться только 'i' так как буква 'а' входит в два слова
У меня получилось только сделать чтобы вывести согласные буквы которые повторяються один раз в тексте,но может быть случай когда согласная буква будет несколько раз в одном слове,но больше не будет повторяться в строке и в таком случае мой вариант не работает.
Ответы (2 шт):
#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;
}
Создаете массив, в котором для каждой согласной буквы храните количество слов, в которых она встречалась, назовем его 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 я оставлю для автора.