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!
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!
Vous pouvez simplement éditer la chaîne résultante pour supprimer très facilement les espaces supplémentaires, regardez la méthode substr ()!