Как вставить элемент в строку после определенного условия?
find_first_of() возвращает либо позицию, либо string::npos. То есть будет срабатывать почти всегда (кроме первого элемента строки). Правильно: if (find_first_of(...) != string::npos).
Надо не просто проверять возврат  функции find_first_of на неравенство string::npos, но и использовать результат функции в качестве указания места, где находится согласная буква.
int main()
{
    string str; //объявление строки
    string str1 = "qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM";
    cout << "Введите строку: ";
    getline(cin,str); //ввод строки
    size_t i = 0;
    while (i < str.size())
    {
        if (auto n = str.find_first_of(str1, i); n != string::npos) 
        {
            str.insert(n + 1, 1 ,'!');
            i = n + 1;
        }
        else i += 1;
    }
    cout << "Изменённая строка: " << str << endl;; //вывод строки
    return 0;
}