Loading...
lazar.malezanov avatar lazar.malezanov 1 Точки

Sentence Shifter

Здравейте! Опитвам се да подкарам задачата Sentence Shifter в judge, но ми дава следната грешка:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Локално при мен (на VS 2019) работи. Сетнах стандарта на c++ 11, но продължава да работи при мен, но не и в judge. Ето кодът ми:

#include<iostream>
#include<queue>
#include<sstream>

void printCollection(const std::deque<std::string>& collection) {
    for (const auto& word : collection) {
        std::cout << word << std::endl;
    }
}

void readInput(std::deque<std::string>& inputWords, size_t& inputShift) {
    std::string line;
    getline(std::cin, line);
    std::istringstream istr(line);

    std::string word;
    while (istr >> word) {
        inputWords.push_back(word);
    }

    std::cin >> inputShift;
    std::cin.ignore();
}

class Shifter {
public:
    Shifter(std::deque<std::string> words) { 
        _words = words;
    }

    void shiftWords(size_t shiftsCount) {
        if (_words.empty()) {
            return;
        }
        for (size_t i = 0; i < shiftsCount; ++i) {
            const auto lastword = _words.back();
            _words.pop_back();
            _words.push_front(lastword);
        }
    }
    
    std::deque<std::string> getShiftedSentence() {
        return _words;
    }
private:
    std::deque<std::string> _words;
};

int main() {
    std::deque<std::string> inputWords;
    size_t inputShift;
    readInput(inputWords, inputShift);

    Shifter shifter = Shifter(inputWords);
    shifter.shiftWords(inputShift);
    const auto result = shifter.getShiftedSentence();

    printCollection(result);
}

Тагове:
0
C++ OOP
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, Лазар :)

Задачата ти ми се струва вярна.
Единственото, което бих променил е да не копирам излишно в конструктора:
 

 Shifter(std::deque<std::string> words) { 
        _words = words;
    }

на
 

 Shifter(const std::deque<std::string>& words) : _words(words ){ 
    }


Може би нямаш и нужда от copy constructor.
 

Shifter shifter = Shifter(inputWords);

Нормален конструктор би ти свършил работа:
 

Shifter shifter(inputWords);



Сега погледнах задачата ти в Judge.
Изглежда, че си изпратил друга задача, която няма нищо общо. Изглежда ми като задачата Letters от лаба.

Пробвай да изпратиш тази версия.

П.С. пуснах твоята задача в Judge и минава със 100 от 100.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.