LanskoyGames
@LanskoyGames
Нейросети, C#, C++, Python и смотри описание:-)

Код должен выводить только те буквы, которые встречались во всех словах, но вместо этого программа резко завершает работу. Что не так?

#include <iostream>
#include <algorithm>
#include <string>
#include <set>
#include <list>
std::string word;
std::list<char> letters;
int main(){
    std::getline(std::cin, word);
    for(char a: word){
        letters.push_back(a);
    }
    while(true){
        std::getline(std::cin, word);
        if(word.empty()){
            for(char s : letters)
                std::cout << s;
            break;
        }
        else{
            for (auto iter = letters.begin(); iter != letters.end(); ){
                if(word.find(*iter) == std::string::npos){
                    letters.erase(iter);
                }
                else{
                }
            }
        }
    }
}
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
У вас в цикле по iter фигня какая-то происходит. Вы там iter не меняете вообще. А надо или сдвигать на следующий элемент, или, если вы удаляете элемент, переходить к значению, которое вернуло erase - оно как раз возвращает следующий за удаленным элемент.
Ответ написан
maaGames
@maaGames
Погроммирую программы
В коде есть ещё неочевидная ошибка. Если в слове одна и та же буква несколько раз встречается, то программа будет работать неправильно. Чтобы этой ошибки не было, вместо list следует использовать set.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы