W jaki sposób praca w C w C++?

W jaki sposób praca w C w C++?
C ++ ma wiele bibliotek w swojej ogólnej standardowej bibliotece. Trzy biblioteki zaangażowane w getline to biblioteka iostream, biblioteka stringów i biblioteka fstream. Biblioteka iostream jest zwykle używana do wejścia z klawiatury i wyjścia do konsoli (terminal). Biblioteka ciągów umożliwia programowi C ++ posiadanie ciągu w postaci struktury danych, tak że każda znak jest w elemencie, a iteratory i indeksy mogą uzyskać do znaków. Biblioteka fstream jest przeznaczona do wejścia i wyjścia do plików na dysku.

GetLine to funkcja członka dla każdej z tych trzech bibliotek. GetLine to funkcja wejściowa. Dane pozostawiają klawiaturę lub plik, w programie w pamięci, jako sekwencja bajtów. W zachodnich europejskich systemach komputerowych postać jest bajtem. Sekwencja znaków po raz pierwszy pojawia się w obszarze pamięci zwanej buforem. Z bufora są one skopiowane lub usuwane jeden po drugim, do uruchomionego programu.

getline () jest jedną z funkcji wyodrębnienia znaków z bufora w pamięci do programu, który jest również w pamięci. Wszystko, co wprowadza. Tak więc getline () zajmuje się przypisywaniem i nie wyświetlaniem. Ekstrakcja oznacza, że ​​znaki są usuwane z bufora do programu; Nie są kopiowane. Postacie są wyodrębnione podczas przybycia. Idea GetLine polega na tym, że Getline wyodrębnia całą linię z bufora do programu.

Ten artykuł dotyczy getline () dla bibliotek iostream i string. getline () dla plików, jest zwykle omawiany z fstream, a więc fstream z funkcją getline () nie będzie omawiany tutaj.

Treść artykułu

  • getline () i CIN
  • getline () i obiekt ciąg
  • Wniosek

getline () i CIN

Cout i CIN to dwa obiekty klasy iostream, które zostały już utworzone i obecne w bibliotece. Po uwzględnieniu klasy iostream w programie C ++ obiekty te można użyć od razu, bez instancji (lub deklaracji). Cout służy do wysyłania tekstu do terminalu, a CIN służy do odbierania tekstu z klawiatury.

Gdy użytkownik wpisuje na klawiaturę, znaki są powtórzone na terminalu, a także wchodzą w bufor w pamięci. Gdy to się dzieje, CIN czeka. Gdy tylko użytkownik naciska klawisz Enter, CIN dla programu przyjmuje tyle słów, ile kodowano, aby wziąć z bufora. Kiedy użytkownik nacisnął klawisz Enter, to była jedna linia. Gdyby CIN został zakodowany za pomocą funkcji członka getline (), CIN zabrałby całą linię do programu.

Linia zwykle kończy się nowym znakiem „\ n” (naciskając klawisz Enter), odpowiadający dziesiętnemu kodowi ASCII 10. Istnieją dwie funkcje członka getline dla CIN (lub iostream). Wyodrębnia się wiele kolejnych znaków, zaczynając od pierwszego. Liczba znaków może zakończyć się przed nowym postacią lub przejść przez nową postać („\ n”). W przypadku drugiej przeciążonej funkcji członka programista decyduje o tym, jaki charakter powinien być koniec linii, i wyodrębnia się do lub tuż przed końcem linii.

Basic_istream & getline (char_type* s, strumień n)

To jest funkcja członka CIN. Pierwszym argumentem tutaj jest tablica stworzona przez programistę. Powinien mieć co najmniej N komórek. N - 1 znak zostanie wyodrębniony z bufora i umieszczony w tablicy, S. N. Pozycja w tablicy otrzyma postać NUL, „\ 0”; I tak tablica stanie się ciągiem. Więc tablica, S musi zostać ogłoszona jako szereg książek książek. Cin.getline () powinien być zakodowany w programie, w którym wkładu są oczekiwane z konsoli.

Czytelnik powinien odczytać i przetestować następujący program z wejściem,

AAA BBB CCC DDD EEE

Naciśnięcie klawisza Enter, EEE:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

Cout <<"Enter Words:" <Char S [14];
Cin.Getline (s, 14);
dla (int i = 0; i <15; i++)
if (s [i] == '\ 0')
przerwa;
Cout <
Cout <powrót 0;

Wyjście to:

aaa bbb ccc d

Wyświetlono trzynaście znaków. For pętka w programie działała bez żadnego problemu. Oznacza to, że podano czternastą pozycję w tablicy „\ 0”. Jeśli rozmiar tablicy jest większy niż n, ciąg nadal zostanie utworzony, ale zajmie to krótszy zasięg.

Basic_istream & getline (char_type* s, strumień n, Char_Type DeLim)

Ta funkcja członka jest podobna do powyższego. Jeśli jednak znaki N-1 wystąpią przed postacią na koniec linii, znaki N-1 zostaną wysłane do tablicy, S. Jeśli nowa postać wystąpi przed osiągnięciem znaków N-1, to wszystkie linie, do, ale nie są uwzględnione, nowa postać zostanie wysłana do tablicy. Postać NUL, „\ 0” również zostanie wysłana do tablicy jako ostatnia postać przez program. Tak więc długość tablicy należy oszacować, dłużej niż n lub dłuższa niż pełna linia bez „\ n”.

Trzecim argumentem, DeLim, jest to „\ n”. Niektóre inne postacie można wybrać w celu uzyskania deliM. W takim przypadku wyszukiwanie może zatrzymać się przed „\ n” lub przejść przez „\ n”. Dla następującego programu, w którym znajduje się dane wejściowe,

AAA BBB CCC DDD EEE

Wszystkie znaki przed naciśnięciem klawisza Enter są przyjmowane:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

Cout <<"Enter Words:" <Char S [25];
Cin.getline (s, 25, „\ n”);
dla (int i = 0; i <25; i++)
if (s [i] == '\ 0')
przerwa;
Cout <
Cout <powrót 0;

Wyjście jest,

AAA BBB CCC DDD EEE

zgodnie z oczekiwaniami.

W poniższym programie do bufora wysyłanych jest 20 znaków, w tym „\ n”. Jednak tylko 12 znaków wyodrębnia się z bufora, ponieważ ogranicznik, deszcz jest „d”. Wejście to:

AAA BBB CCC DDD EEE

Program to:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

Cout <<"Enter Words:" <Char S [25];
Cin.getline (s, 25, „d”);
dla (int i = 0; i <25; i++)
if (s [i] == '\ 0')
przerwa;
Cout <
Cout <powrót 0;

Wyjście to:

AAA BBB CCC

Po ostatnim „C” jest dodatkowa przestrzeń.

getline () i obiekt ciąg

Funkcję getline () może być używana do uzyskania wejścia z klawiatury i dysku plików. W tej sekcji artykułu dotyczy wprowadzania danych z klawiatury do programu za pośrednictwem obiektu CIN. W tym artykule nie jest omawiane w tym artykule nie jest omawiane. Biblioteka ciągów ma cztery przeciążone funkcje dla getline (), sparowane. Te cztery funkcje są funkcjami biblioteki, a nie funkcjami członkowskimi klasy ciągów.

Basic_istream & getline (Basic_istream & IS, Basic_String & Str)

Ta funkcja biblioteki ciągów jest podobna do funkcji getline, bez ograniczenia, omówione powyżej. Jednak zamiast wysyłać znaki zebrane do tablicy, znaki są wysyłane do obiektu String, STR, instancji z klasy ciągów. Argumentem tej funkcji „IS” może być CIN. Długości argumentów „IS” i STR nie są szacowane ani z góry określone. Ta funkcja członka różni się również od odpowiedniego powyżej tym, że zbiera całą linię z bufora, z CIN, bez nowej postaci użytej w funkcji. Biblioteka ciągów musi być zawarta w programie. Poniższy program ilustruje jego użycie z wejściem klawiatury,

AAA BBB CCC DDD EEE

Naciśnij klawisz Enter po pisaniu, eee. Program to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Cout <<"Enter Words:" <string str;
getline (cin, str);
dla (int i = 0; i <25; i++)
if (str [i] == '\ 0')
przerwa;
Cout <
Cout <powrót 0;

Wyjście to:

AAA BBB CCC DDD EEE

zgodnie z oczekiwaniami. Całkowita liczba znaków z klawiatury wynosi 19, z wyłączeniem „\ n”. Wyjście jest prawidłowe, ponieważ iterowana na pętlę 25 razy.

Basic_istream & getline (basic_istream && IS, Basic_String & Str)

Ta funkcja jest podobna do powyższego, ale podkreśla ruch.

Basic_istream & getline (basic_istream & IS, Basic_String & Str, dewelorka wykresu)

Ta funkcja biblioteki ciągów, która nie jest funkcją elementu klasy ciągów, jest podobna do powyższej funkcji, ale z ogranicznikiem. Jednak wszystkie znaki, które pojawią się przed postacią na koniec linii, zostaną wysłane do drugiego argumentu, STR. Koniec linii w buforze jest wskazywany przez trzeci znak argumentu, DeLim. Delikat powinien być „\ n”. Jednak programista może zdecydować o dowolnej innej postaci dla końca linii.

Dla następującego programu, w którym znajduje się dane wejściowe,

AAA BBB CCC DDD EEE

wszystkie znaki przed naciśnięciem klawisza Enter. Klucz Enter wynika w „\ n”.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Cout <<"Enter Words:" <string str;
getline (cin, str, „\ n”);
dla (int i = 0; i <25; i++)
if (str [i] == '\ 0')
przerwa;
Cout <
Cout <powrót 0;

Wyjście to:

AAA BBB CCC DDD EEE

W poniższym programie z tym samym wejściem, postacią Deliiter lub End-of-Line jest „D”:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Cout <<"Enter Words:" <string str;
getline (cin, str, „d”);
dla (int i = 0; i <25; i++)
if (str [i] == '\ 0')
przerwa;
Cout <
Cout <powrót 0;

Wyjście to:

AAA BBB CCC

Istnieje pojedynczy znak przestrzeni po ostatnim „c” w wyjściu.

Basic_istream & getline (basic_istream && IS, Basic_String & Str, dewelorka wykresu)

Ta funkcja jest podobna do powyższego, ale podkreśla ruch.

Wniosek

Funkcja getline jest używana do wejścia. Wejście może pochodzić z klawiatury lub z pliku. Dane wejściowe są sekwencją znaków w buforze w pamięci. Programator może kodować funkcję getline (), aby uzyskać dane, gdy pojawią się do jednostki systemowej (bufor pamięci). CIN odpowiada buforowi. getline () otrzymuje dane w fragmentach, jeden kawałek na skan. Chuck może być daną liczbą znaków lub dowolnej liczby znaków, ale wyznaczony przez znak na koniec linii.

Iostream, ciąg i biblioteki fstream mają funkcję getline (). Z biblioteką iostream, getline () jest funkcją członkowską obiektu CIN (przeciążony). W bibliotece ciągów getline () to tylko funkcja w bibliotece (przeciążona); To nie jest funkcja członkowska klasy ciągów. W rzeczywistości CIN jest w rzeczywistości argumentem funkcji getline () biblioteki ciągów. Jeśli chodzi o funkcję getline () w bibliotece fstream, to jest dyskusja, przez jakiś czas.