C ++ Getline après Cin

J’essaie d’écrire un programme qui obtient la consortingbution de l’utilisateur d’une manière spécifique. Premièrement, je saisis un mot qui ne contient pas d’espace; Ensuite, je saisis un autre mot qui peut contenir de l’espace; Et le programme affiche les 2 mots séparément.

Par exemple, je saisis “Tom, un garçon paresseux”, puis le programme fournit “Tom: un garçon paresseux”

Voici ce que j’ai tenté de faire:

int main(){ ssortingng a; cin >> a; ssortingng b; getline(cin, b); cout << a << ":" << b<< endl; } 

J’ai essayé d’utiliser getline après cin, mais le résultat ressemble à: “Tom: un garçon paresseux”

Si je saisis “Tom (plusieurs espaces) un garçon paresseux”, le résultat est “Tom: (plusieurs espaces) un garçon paresseux” et je ne veux pas de ces espaces. Y a-t-il une meilleure manière de faire cela?

Je vois qu’il existe des moyens qui nécessitent de modifier la chaîne après cin, mais pouvons-nous résoudre le problème dès le stade de la saisie?

La fonction std::getline ne saute pas les blancs comme le fait l’opérateur de saisie normal >> . Vous devez supprimer vous-même les espaces blancs de début (et de fuite possible?).

Il est possible de supprimer l’espace blanc std::find_if recherchant d’abord le premier caractère non blanc (avec par exemple std::find_if ), puis en std::find_if une sous-chaîne de cette position au rest (avec std::ssortingng::substr ).


Ou, comme le suggère dyp, utilisez std::ws . Les références liées ont un très bon exemple d’utilisation.

getline() lit les espaces, si vous voulez ignorer les espaces, essayez:

 cin.ignore(); getline(cin, b); 

EDIT: Désolé, cela lit en effet 1 caractère, ceci est une autre solution pour vous:

  getline(cin, b); ssortingng noLeadingWS = b.substr(b.find_first_not_of(' '),b.length()-b.find_first_not_of(' ')); cout << a << ": " << noLeadingWS<< std::endl; 

Il semble donc que votre programme ne fait que saisir l’espace que vous avez mis dans le programme, vous pouvez vous en débarrasser de plusieurs façons!

  1. Vous pouvez diffuser l’entrée vous-même en utilisant cin.get () caractère par caractère. Vous les ajoutez à une chaîne jusqu’à obtenir un espace, puis continuez, mais n’ajoutez pas d’espace getline ou vous pouvez continuer votre diffusion personnalisée cette fois à la recherche d’une nouvelle ligne!

  2. Vous pouvez simplement éditer la chaîne résultante pour supprimer très facilement les espaces supplémentaires, regardez la méthode substr ()!