Софтуерно Инженерство
Loading...
+ Нов въпрос
Aleksandar_Aleksiev avatar Aleksandar_Aleksiev 1 Точки

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 1262 Точки

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

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 1 Точки

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

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

0
MartinBG avatar MartinBG 1262 Точки

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

0
20/01/2020 20:11:15