Comment faire séparer deux entiers par espace dans un char []?
-
28-10-2019 - |
Question
J'obtiendrai une chaîne de numéros qui ressemble à ceci.
12 45
Deux entiers se sont séparés avec l'espace.
La sortie sera de 57.
J'ai essayé d'utiliser,
string numbersstream;
cin >> numbersstream;
istringstram twonumbers (numbersstream);
twonumbers >> a >> b;
Mais chaque fois que je l'exécute, seul A est correct, B ne l'est pas.
Quelles autres fonctions y a-t-il pour m'aider? Ou est-ce juste un problème de codage que j'ai?
J'ai déjà eu deux types de suggestions dans les réponses.
getline(cin,numbersstream);
Et
cin << a << b;
Merci à tous pour votre temps. Des méthodes supplémentaires seront très appréciées.
La solution
Le problème est avec votre contribution de CIN. Utilisant operator>>
est délimité dans l'espace. Donc, si l'utilisateur tape "12 45", seuls les 12 seront extraits. Vous pouvez utiliser Getline à la place:
getline(cin,numbersstream);
Autres conseils
Essaye ça:
int main()
{
int a;
int b;
std::cin >> a >> b;
std::cout << a+b << "\n";
}
Le problème est que dans votre code:
cin >> numbersstream;
Ne lit un seul mot séparé de l'espace (c'est-à-dire 12) dans la chaîne numbersstream
. Ainsi, lorsque vous construisez twonumbers
Il n'a en fait qu'un seul numéro. Par conséquent, il ne fait que «A» et «B» n'est pas défini.
Vous pouvez le faire à votre façon, mais ce dont vous avez vraiment besoin ici, c'est de lire toute la ligne dans la chaîne:
std::getline(std::cin, numbersstream);
istringstram twonumbers (numbersstream);
Vous ne lisez que jusqu'à ce que le premier personnage blanc
cin >> numberstream;
Les éléments suivants liront tout dans la chaîne jusqu'à ce qu'un caractère délimiteur soit lu (' n') ou de fin de fichier. Le délimiteur est jeté.
getline(cin,numbersstream);