@LanskoyGames
У модераторов первое место, но только с конца...

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

#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{
                }
            }
        }
    }
}
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
У вас в цикле по iter фигня какая-то происходит. Вы там iter не меняете вообще. А надо или сдвигать на следующий элемент, или, если вы удаляете элемент, переходить к значению, которое вернуло erase - оно как раз возвращает следующий за удаленным элемент.
Ответ написан
maaGames
@maaGames
Погроммирую программы
В коде есть ещё неочевидная ошибка. Если в слове одна и та же буква несколько раз встречается, то программа будет работать неправильно. Чтобы этой ошибки не было, вместо list следует использовать set.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час