Софтуерно Инженерство
Loading...
Yordan.Vachev avatar Yordan.Vachev 2 Точки

Old Books

Ани отива до родния си град след много дълъг период извън страната. Прибирайки се вкъщи тя вижда
старата библиотека на баба си и си спомня за любимата си книга. Помогнете на Ани, като напишете програма
в която тя въвежда търсената от нея книга(текст) и капацитета на библиотеката(цяло число). Докато Ани не
намери любимата си книга или не провери всички в библиотеката, програмата трябва да чете всеки път на
нов ред името на всяка следваща книга (текст).
 Ако не открие книгата да се отпечата на два реда:
o "The book you search is not here!"
o "You checked {брой} books."
 Ако открие книгата си се отпечатва един ред:
o "You checked {брой} books and found it."
Примерен вход и изход
Вход Изход Обяснения
Troy
8
Stronger
Life Style
Troy

You checked 2 books and found it. Книгата която Ани търси, в случая е
Troy, а библиотеката съдържа 8
книги. Първата е Stronger, втората е
Life Style, третата книга е търсената –
Troy и програмата приключва.

The Spot
4
Hunger Games
Harry Potter
Torronto
Spotify

The book you search is not here!
You checked 4 books.

Книгата, която търси Ани е "The Spot".
Библиотеката съдържа 4 книги.
Първата е Hunger Games, втората
Harry Potter, третата Torronto, а
четвъртата Spotify. Понеже няма
повече книги в библиотеката
четенето на имена приключва. Ани не
намери книгата, която търсеше.

Bourne
32
True Story
Forever
More Space
The Girl
Spaceship
Strongest
Profit
Tripple
Stella
The Matrix
Bourne

You checked 10 books and found it.

 

 

 

#include <iostream>
#include <cmath>

using namespace std;

int main()
{

    string favouriteBook;
    getline(cin, favouriteBook);

    int numberOfBooks;
    cin >> numberOfBooks;

    int counter = 0;
    bool bookIsFound = false;

    string nextBookName;
    cin >> nextBookName;

    while(counter < numberOfBooks){
        if(nextBookName == favouriteBook){
            bookIsFound = true;
            break;
        }else{
            counter ++;
            cin >> nextBookName;
        }
    }

    if(!bookIsFound){
        cout << "The book you search is not here!" << endl;
        cout << "You checked " << numberOfBooks << " books." << endl;
    }else{
        cout << "You checked " << counter << " books and found it." << endl;
    }

    return 0;
}

Малко помощ? Това, което се иска ми се изписва но judge реве :)

Тагове:
0
Programming Basics with C++
kolioi avatar kolioi 599 Точки

Две неща трябва да направиш:

1. Стрингове (в случая имената на книгите) винаги се четат с getline(). Иначе, ако четеш с cin, ще прочетеш само първата дума, защото спейса е стандартен разделител и cin спира четенето когато стигне до спейс (интервал).

2. Не бива да се смесват cin и getline(). Ако се налага обаче, след всяко четене с cin и преди следващо четене с getline() трябва да викаш cin.ignore(). Причината е, че въвъ входния буфер остава знака за край на ред \n и getline го прочита.

Иначе логиката ти е ОК, направи само тези промени и ще вземеш 100 точки.

П.П. Тези неща би трябвало да са ви ги казали на лекции/упражнения.

2
RuNNeR4142 avatar RuNNeR4142 392 Точки

Шефа на C++, благодаря за пояснението!

0
Yordan.Vachev avatar Yordan.Vachev 2 Точки

да проблема е в системата, но как да си кача решенията? Писах , но нямам отговор

0
RuNNeR4142 avatar RuNNeR4142 392 Точки

Както @kolioi обясни проблема не е в системата ами в четенето на данни така че прочети забележките горе. Този случай който ти дава грешка е специален за C++ и него не го минаваш успешно.

0
Yordan.Vachev avatar Yordan.Vachev 2 Точки

Благодаря за отговорите!

1
Yordan.Vachev avatar Yordan.Vachev 2 Точки

Благодаря!

0