Comment Getline fonctionne-t-elle en C++?

Comment Getline fonctionne-t-elle en C++?
C ++ a de nombreuses bibliothèques dans sa bibliothèque standard générale. Trois des bibliothèques impliquées dans Getline sont la bibliothèque iOStream, la bibliothèque de chaînes et la bibliothèque FStream. La bibliothèque iOStream est généralement utilisée pour la saisie du clavier et la sortie à la console (terminal). La bibliothèque de chaînes permet au programme C ++ d'avoir une chaîne sous la forme d'une structure de données, de sorte que chaque caractère est dans un élément, et les caractères sont accessibles par les itérateurs et avec des index. La bibliothèque FStream est destinée à l'entrée et à la sortie dans les fichiers du disque.

Getline est une fonction de membre pour chacune de ces trois bibliothèques. Getline est une fonction d'entrée. Les données laissent le clavier ou le fichier, dans le programme en mémoire, en tant que séquence d'octets. Dans les systèmes informatiques d'Europe occidentale, un personnage est un octet. La séquence de caractères arrive d'abord dans une zone de mémoire appelée le tampon. Depuis le tampon, ils sont copiés ou supprimés un par un dans le programme qui s'exécute.

GetLine () est l'une des fonctions pour extraire les caractères du tampon en mémoire dans le programme, qui est également en mémoire. Tout ce qui saisit. Donc, getLine () traite de l'imputation et non de la sortie. L'extraction signifie que les caractères sont supprimés du tampon dans le programme; Ils ne sont pas copiés. Les personnages sont extraits à leur arrivée. L'idée de Getline est que Getline extrait toute une ligne du tampon dans le programme.

Cet article traite de getline () pour les bibliothèques iOStream et String. getLine () pour les fichiers, est normalement discuté avec fstream, et donc fstream avec sa fonction getline (), ne sera pas discuté ici.

Contenu de l'article

  • getline () et cin
  • objet getLine () et String
  • Conclusion

getline () et cin

Cout et Cin sont deux objets de la classe iOStream qui ont déjà été instanciés et présents dans la bibliothèque. Une fois que la classe iOStream a été incluse dans le programme C ++, ces objets peuvent être utilisés immédiatement, sans instanciation (ni déclaration). Cout est pour envoyer un SMS au terminal, et CIN est pour recevoir un texte du clavier.

Alors que l'utilisateur tape sur le clavier, les caractères sont repris au terminal et entrant dans un tampon en mémoire. Comme cela se produit, Cin attend. Dès que l'utilisateur appuie sur la touche ENTER, CIN pour le programme prendrait autant de mots qu'il était codé pour prendre le tampon. Lorsque l'utilisateur a appuyé sur la touche Entrée, c'était une ligne. Si CIN était codé avec sa fonction de membre getline (), alors CIN prendrait toute la ligne dans le programme.

Une ligne se termine normalement avec le caractère Newline, '\ n' (en appuyant sur la touche Entrée), correspondant à un code ASCII décimal 10. Il y a deux fonctions de membres Getline pour CIN (ou iOStream). On extrait un certain nombre de caractères consécutifs, à partir du premier. Le nombre de caractères peut se terminer devant le personnage de Newline ou passer devant le caractère Newline ('\ n'). Pour l'autre fonction de membre surchargé, le programmeur décide de quel caractère la fin de ligne devrait être, et il extrait jusqu'à ou juste avant la fin de ligne.

BASIC_ISTREAM & GETLINE (CHAR_TYPE * S, StreamSize n)

Ceci est une fonction de membre CIN. Le premier argument ici est un tableau créé par le programmeur. Il devrait avoir au moins n cellules. n - 1 caractère sera extrait du tampon et placé dans le tableau, S. La Nth Position dans le tableau recevra le caractère NUL, '\ 0'; Et donc le tableau deviendra une chaîne. Le tableau doit donc être déclaré comme une gamme de voies. cin.getLine () doit être codé dans le programme, où la contribution est attendue de la console.

Le lecteur doit lire et tester le programme suivant avec l'entrée,

aaa bbb ccc ddd eee

en appuyant sur la touche Entrée après, EEE:

#inclure
Utilisation de Namespace Std;
int main()

couter <<"Enter Words:" <char s [14];
cin.getline (s, 14);
pour (int i = 0; i <15; i++)
if (s [i] == '\ 0')
casser;
couter <
couter <retour 0;

La sortie est:

aaa bbb ccc d

Treize caractères ont été affichés. La boucle pour le programme a fonctionné sans aucun problème. Cela signifie que la quatorzième position dans le tableau a été donnée, '\ 0'. Si la taille du tableau est plus grande que N, la chaîne sera toujours formée, mais elle prendra une portée plus courte.

BASIC_ISTREAM & GETLINE (CHAR_TYPE * S, StreamSize N, char_type Delim)

Cette fonction membre est similaire à ce qui précède. Cependant, si des caractères N-1 se produisent avant le caractère de fin de ligne, alors les caractères N-1 seront envoyés au tableau, S. Si le caractère Newline se produit avant que les caractères N-1 ne soient atteints, alors toutes les lignes, jusqu'à mais non incluses, le caractère Newline sera envoyé au tableau. Le caractère NUL, '\ 0' sera également envoyé au tableau comme le dernier caractère par le programme. Ainsi, la longueur du tableau doit être estimée, plus longue que n ou plus que la ligne complète sans «\ n».

Le troisième argument, Delim, est d'être «\ n». Certains autres personnages peuvent être choisis pour Delim. Dans ce cas, la recherche peut s'arrêter avant «\ n» ou passer devant «\ n». Pour le programme suivant, où l'entrée est,

aaa bbb ccc ddd eee

Tous les caractères avant la touche ENTER sont enfoncés:

#inclure
Utilisation de Namespace Std;
int main()

couter <<"Enter Words:" <char s [25];
cin.getline (s, 25, '\ n');
pour (int i = 0; i <25; i++)
if (s [i] == '\ 0')
casser;
couter <
couter <retour 0;

La sortie est,

aaa bbb ccc ddd eee

comme prévu.

Dans le programme suivant, 20 caractères sont envoyés au tampon, y compris '\ n'. Cependant, seuls 12 caractères sont extraits du tampon car le délimiteur, Delim est «D». L'entrée est:

aaa bbb ccc ddd eee

Le programme est:

#inclure
Utilisation de Namespace Std;
int main()

couter <<"Enter Words:" <char s [25];
cin.getline (s, 25, «d»);
pour (int i = 0; i <25; i++)
if (s [i] == '\ 0')
casser;
couter <
couter <retour 0;

La sortie est:

AAA BBB CCC

Il y a un espace supplémentaire après le dernier «C», pour en faire 12 caractères.

objet getLine () et String

La fonction getLine () peut être utilisée pour obtenir des commentaires du clavier et du disque des fichiers. Cette section de l'article traite de la mise en place du clavier dans le programme via l'objet CIN. Obtenir la contribution d'un fichier dans le programme n'est pas discuté dans cet article. La bibliothèque de chaînes a quatre fonctions surchargées pour getLine (), appariées. Ces quatre fonctions sont des fonctions de la bibliothèque et non des fonctions membres de la classe de chaîne.

Basic_Sistream & Getline (Basic_Sistream & Is, Basic_String & Str)

Cette fonction de bibliothèque de chaînes est similaire à la fonction Getline, sans le délimiteur, délivré ci-dessus. Cependant, au lieu d'envoyer des caractères collectés à un tableau, les caractères sont envoyés à un objet de chaîne, STR, instanciés à partir de la classe de chaîne. L'argument «IS» de cette fonction peut être cin. Les longueurs des arguments, «IS» et STR n'est pas estimé ou prédéterminé. Cette fonction de membre diffère également de celle correspondante ci-dessus en ce qu'il collecte une ligne entière à partir du tampon, avec CIN, sans le caractère Newline utilisé dans la fonction. La bibliothèque de chaînes doit être incluse dans le programme. Le programme suivant illustre son utilisation avec l'entrée du clavier,

aaa bbb ccc ddd eee

Appuyez sur la touche Entrée après la saisie, EEE. Le programme est:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

couter <<"Enter Words:" <String Str;
Getline (Cin, Str);
pour (int i = 0; i <25; i++)
if (str [i] == '\ 0')
casser;
couter <
couter <retour 0;

La sortie est:

aaa bbb ccc ddd eee

comme prévu. Le nombre total de caractères du clavier est de 19, excluant «\ n». La sortie est correcte car la boucle a itérée 25 fois.

Basic_Sistream & Getline (Basic_Sistream && est, Basic_String & Str)

Cette fonction est similaire à ce qui précède, mais met l'accent sur le déplacement.

Basic_Sistream & Getline (Basic_Sistream & Is, Basic_String & Str, Chart Delim)

Cette fonction de bibliothèque de chaînes, qui n'est pas une fonction de membre de classe de chaîne, est similaire à la fonction ci-dessus mais avec un délimiteur. Cependant, tous les personnages qui se produisent avant le personnage de fin de ligne seront envoyés au deuxième argument, Str. La fin de ligne dans le tampon est indiquée par le troisième caractère argument, Delim. Delim devrait être '\ n'. Cependant, le programmeur peut décider de tout autre personnage pour la fin de ligne.

Pour le programme suivant, où l'entrée est,

aaa bbb ccc ddd eee

Tous les caractères avant la touche Entrée sont pris. La clé Entrée résulte de '\ n'.

#inclure
#inclure
Utilisation de Namespace Std;
int main()

couter <<"Enter Words:" <String Str;
getline (cin, str, '\ n');
pour (int i = 0; i <25; i++)
if (str [i] == '\ 0')
casser;
couter <
couter <retour 0;

La sortie est:

aaa bbb ccc ddd eee

Dans le programme suivant avec la même entrée, le caractère délicat ou de fin de ligne est «D»:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

couter <<"Enter Words:" <String Str;
getline (cin, str, 'd');
pour (int i = 0; i <25; i++)
if (str [i] == '\ 0')
casser;
couter <
couter <retour 0;

La sortie est:

AAA BBB CCC

Il y a un seul caractère d'espace après le dernier «C» dans la sortie.

Basic_Sistream & Getline (Basic_Sistream && est, Basic_String & Str, Chart Delim)

Cette fonction est similaire à ce qui précède, mais met l'accent sur le déplacement.

Conclusion

La fonction Getline est utilisée pour la saisie. L'entrée peut provenir du clavier ou d'un fichier. Les données d'entrée sont une séquence de caractères dans un tampon en mémoire. Le programmeur peut coder la fonction getline () pour obtenir les données lorsqu'il entre dans l'unité système (tampon de mémoire). CIN correspond au tampon. getLine () obtient les données en morceaux, un morceau par scan. Un mandrin peut être un nombre donné de caractères ou n'importe quel nombre de caractères mais délimité par le caractère de fin de ligne.

L'iOStream, la chaîne et les bibliothèques fstream ont toutes la fonction getline (). Avec la bibliothèque iOStream, getLine () est une fonction membre de l'objet CIN (surchargé). Avec la bibliothèque String, getLine () n'est qu'une fonction dans la bibliothèque (surchargée); ce n'est pas une fonction membre de la classe de chaîne. En fait, CIN est en fait un argument de la fonction getline () de la bibliothèque de chaînes. Quant à la fonction getline () dans la bibliothèque fstream, c'est une discussion, pour une autre fois.