10
votes

Rediriger CIN à une chaîne

Je veux avoir des informations à lire à partir d'une chaîne.

Y a-t-il un moyen de le faire? P>

quelque chose comme ceci: p>

const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this

int i;
cin>>i;

cout<<i; //123


2 commentaires

Si vous souhaitez utiliser un tableau de caractères au lieu d'une chaîne STD: String, vous pouvez utiliser CIN.getline (S, N); Où N est le "nombre de caractères à stocker (y compris le caractère null de terminaison)". Voir Cplusplus.com/reference/iostream/istream/getline . Il y a aussi une gaine pour STD :: String, voir cplusplus.com/reference/string/getline < / a>


@anno: lire Cin de une chaîne, pas de CIN dans une chaîne.


4 Réponses :


1
votes

Essayez quelque chose comme: xxx


0 commentaires

6
votes

Comme ceci:

#include <sstream>
#include <iostream>

std::istringstream stream("Some string 123");
streambuf* cin_backup = std::cin.rdbuf(stream.rdbuf());


0 commentaires

4
votes

Je recommanderais d'utiliser un flux de chaîne. Vous pouvez utiliser les opérateurs d'E / S surchargés tels que vous le feriez avec Standard in / Standard Out. Quelque chose comme ceci: xxx

Je trouverais personnellement que cela soit un peu plus clair que la lecture d'une chaîne à la norme dedans, puis de l'utilisation des opérateurs d'E / S de la norme dans la norme, mais peut-être qu'il y a une raison pour laquelle vous Voulez-vous la lire à la norme en premier que je ne réalisez pas.

J'espère que cela vous aide!


0 commentaires

0
votes

en C ++ 17, La solution Ben Voigt ne compilera pas que si vous utilisez basic_stringbuf code>. Utilisez plutôt celui ci-dessous:

  stringbuf s;
  const char *userInput = "10 1 2 3 4 5 6 7 8 9 10 3 7";         
  s.sputn(userInput, strlen(userInput)); 
  cin.rdbuf(&s);


0 commentaires