Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Aleksandar_Aleksiev avatar Aleksandar_Aleksiev 4 Точки

C++ Fundamentals - Exam (17 November 2019) - 1.Reporter - не мога да получа повече от 50т. от Judge

Здравейте, другари!

Имам нужда от вашата помощ за решаването на следната задача: https://judge.softuni.bg/Contests/Practice/Index/1751#0

Моето решение е следното:

int main()
{
    std::set<std::string> str;
    //std::set<std::string>::iterator itr;

    std::stringstream infoStream;
    std::string temp;
    std::string output;
    int turns = 0;

    std::string getInputStr;
    std::getline(std::cin, getInputStr);
    turns = std::stoi(getInputStr);

    for (size_t i = 0; i < turns; i++)
    {
        std::getline(std::cin, getInputStr);
        infoStream << getInputStr;
        //infoStream << " ";
        char previusDot = 57;

        while (!infoStream.eof())
        {

            infoStream >> temp;
            if (!str.count(temp) || temp[0] == 46)
            {
                if (previusDot != temp[0])
                {
                    output += temp + " ";
                    previusDot = temp[0];
                }
                if (temp[0] == 46 || temp[0] == 33 || temp[0] == 63 || temp[0] == 59) // за край на изречението освен точка съм добавил и  ! ? ;
                {
                    str.clear();
                }
            }
            str.insert(temp);
            if (temp[0] > 64 && temp[0] < 91) //проверявам за малка и голяма буква на всяка дума (Help == help)
            {
                temp[0] += 32;
                str.insert(temp);
            }
            if (temp[0] > 96 && temp[0] < 123) //проверявам за малка и голяма буква на всяка дума (Help == help)
            {
                temp[0] -= 32;
                str.insert(temp);
            }
        }
        infoStream.clear();
    }
    output.resize(output.size() - 1); //махам последният празен интервал
    std::cout << output;

    //int a;
    //std::cin >> a;
    return 0;
}

Като оценка от системата получавам 50/100 и не мога да разбера какъв е проблема! При какви входни данни получавам грешни отговори?

Ще съм много благодарен ако някой може да даде идея.

Поздрави,

Александър

Тагове:
0
C++ Fundamentals 18/01/2020 16:13:42
MartinBG avatar MartinBG 4803 Точки

Придържай се към условието:

Each sentence is constructed from whitespace delimited words and ends with a ‘.’ (dot) symbol. The dot symbol is also whitespace delimited from neighbor words.
Your program should eliminate the duplicate words within each sentence – only the first occurrence of any word should be kept.

 Единствено "." е разделител между изреченията, думи с главни/малки букви (напр. "How" и "how") са различни. Оправи тези неща и виж дали ще ти мине решението.

0
Aleksandar_Aleksiev avatar Aleksandar_Aleksiev 4 Точки

Дори и да се придържам към условието, отново получавам 50/100.

Този update за проверка за малка и голяма начална буква за всяка дума в изречение и добавянето на !?; за край на изречението го въведох в последствие като си мислех, че може би това ще окаже благоприятно развитие на резултата 50/100.

0
MartinBG avatar MartinBG 4803 Точки

Явно има и други пропуски в логиката на решението ти. Опитай да поизчистиш кода (прекалено много if-ове, труден за четене), помисли за по-кратки начини за постигане на целите ти. Ето едно решение от мен за 100/100, но все пак опитай първо да оправиш твоето..

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