Énoncé du problème

Donnez des noms et des numéros de téléphone, créez un annuaire téléphonique qui met en correspondance les noms des amis avec leurs numéros de téléphone respectifs. Vous recevrez alors un nombre inconnu de noms pour interroger votre annuaire téléphonique. Pour chaque nom demandé, imprimez l'entrée associée de votre répertoire téléphonique sur une nouvelle ligne sous la forme "nom=numérophone" ; si une entrée pour le nom n'est pas trouvée, imprimez "Not found" à la place.

Format d'entrée : ...

Après les lignes d'entrées du répertoire téléphonique, il y a un nombre inconnu de lignes de requêtes. Chaque ligne (requête) contient un à rechercher, et

Vous devez continuer à lire les lignes jusqu'à ce qu'il n'y ait plus d'entrée.

Comment dois-je le boucler jusqu'à ce qu'il n'y ait plus d'entrée?

Quelqu'un peut-il également me dire comment cela est possible en C++?

Voici mon code en Python 3:

n = int(input())
names = {}
for foo in range(n):
    entry = input().split(' ')
    names[entry[0]] = entry[1]
while (1==1):
    check = input()
    if(names.get(check)!=None):
        print(check + '=' + names.get(check))
    else:
        print('Not Found')

Il boucle simplement à l'infini et déclenche donc l'erreur. entrez la description de l'image ici

Voici le code C++ :

#include<iostream>
#include<map>
#include<string>
using namespace std;

int main(void)
{
    map<string, string> phonebook;
    int n;
    cin >> n;
    string key, num;
    for(int i = 0; i < n; i++)
    {
        cin >> key >> num;
        phonebook.insert(pair<string, string>(key, num));
    }
    while (1 == 1)
    {
        cin >> key;
        if(phonebook.count(key) > 0)
            cout << key << "=" << phonebook[key] << endl;
        else
            cout << "Not found" << endl;
    }
}
1
harshit54 16 mars 2019 à 15:54

2 réponses

Meilleure réponse

Comment dois-je le boucler jusqu'à ce qu'il n'y ait plus d'entrée?

Votre utilisation de la boucle while est appropriée. Pour intercepter et faire taire l'erreur, vous pouvez utiliser un bloc try-except :

n = int(input())
names = {}
for foo in range(n):
    entry = input().split(' ')
    names[entry[0]] = entry[1]

while True:     # (1 == 1) == True
    try:
        check = input()
    except EOFError:  # catch the error
        break       # exit the loop

    if(names.get(check)!=None):
        print(check + '=' + names.get(check))
    else:
        print('Not Found')

Quelqu'un peut-il également me dire comment cela est possible en C++?

Hmm... demande bizarre. Je vous indiquerai std::getline et std::map et laissez-les parler. :-)

2
TrebledJ 16 mars 2019 à 12:59

Voici le bon code C++ :

#include<iostream>
#include<map>
#include<string>
using namespace std;

int main(void)
{
    map<string, string> phonebook;
    int n;
    cin >> n;
    string key, num;
    for(int i = 0; i < n; i++)
    {
        cin >> key >> num;
        phonebook.insert(pair<string, string>(key, num));
    }
    getline(cin, key);

    while(getline(cin, key))        //Loop runs while we are getting input.
    {
        if(phonebook.count(key) > 0)
            cout << key << "=" << phonebook[key] << endl;
        else
            cout << "Not found" << endl;
    }
}
0
Harshit Joshi 16 mars 2019 à 13:39