getline은 C++에서 어떻게 작동합니까?

getline은 C++에서 어떻게 작동합니까?

2022-06-04 last update

6 minutes reading C++
C++의 일반 표준 라이브러리에는 많은 라이브러리가 있습니다.getline과 관련된 세 개의 라이브러리는iostream 라이브러리,string 라이브러리와 fstream 라이브러리입니다.iostream 라이브러리는 일반적으로 키보드에서 컨트롤러 (터미널) 로 입력하고 출력하는 데 사용됩니다.문자열 라이브러리는 C++ 프로그램으로 하여금 데이터 구조 형식의 문자열을 가지게 하여 모든 문자가 하나의 요소에 위치하고 교체기와 색인을 통해 이 문자에 접근할 수 있게 한다.fstream 라이브러리는 디스크에 파일을 입력하고 출력하는 데 사용됩니다.
getline은 이 세 라이브러리의 모든 라이브러리의 구성원 함수입니다.getline은 입력 함수입니다.데이터는 바이트 시퀀스 형식으로 키보드나 파일을 떠나 메모리에 있는 프로그램으로 들어갑니다.서유럽 컴퓨터 시스템에서 문자는 바이트이다.문자 시퀀스는 먼저 버퍼라고 불리는 메모리 영역에 도달합니다.버퍼에서 실행 중인 프로그램에 하나씩 복사하거나 삭제합니다.
getline () 은 메모리의 버퍼에서 문자를 프로그램에 추출하는 함수입니다. 이 프로그램도 메모리에 있습니다.모든 입력 내용.따라서 getline () 은 출력이 아닌 입력을 처리합니다.추출은 버퍼에서 프로그램으로 문자를 삭제하는 것을 가리킨다.그것들은 복제되지 않을 것이다.문자가 도착할 때 추출됩니다.getline의 사상은 getline이 버퍼에서 전체 줄의 내용을 프로그램에 추출하는 것이다.
본고는 iostream과string 라이브러리의 getline () 을 토론합니다.파일의 getline () 은 보통 fstream과 함께 토론하기 때문에 fstream 및 getline () 함수는 여기서 토론하지 않습니다.

문장 내용




  • getline () 및cin


    cout와cin은iostream류의 두 대상으로 실례화되어 라이브러리에 존재합니다.iostream 클래스가 C++ 프로그램에 포함되면 실례화 (또는 설명) 없이 이 대상을 직접 사용할 수 있습니다.cout는 터미널에 텍스트를 보내는 데 사용되고,cin은 키보드에서 텍스트를 받는 데 사용됩니다.
    사용자가 키보드에 입력하면 문자가 터미널에서 울리고 메모리의 버퍼로 들어갑니다.이런 상황이 발생함에 따라cin은 기다리고 있다.사용자가 Enter 키를 누르면 프로그램의 cin은 버퍼에서 인코딩된 글자 수를 추출합니다.사용자가 Enter 키를 눌렀을 때 한 줄만 표시됩니다.만약cin이 getline () 구성원 함수로 인코딩된다면cin은 전체 코드를 프로그램에 가져옵니다.
    일반적으로 한 줄은 10진수 ASCII 코드 10에 해당하는 줄 바꿈 문자'\n'(Enter 키를 누름)으로 끝납니다.cin(또는iostream)에는 두 개의 getline 구성원 함수가 있습니다.첫 번째 문자부터 여러 개의 연속 문자를 추출합니다.문자 수는 줄 바꿈 문자 앞에서 끝나거나 줄 바꿈 문자 ("\n") 를 초과할 수 있습니다.다른 구성원 함수를 다시 불러오는 데 있어서 프로그래머는 줄의 끝이 어떤 문자인지 결정하고 줄의 끝이나 이전의 문자를 추출합니다.

    basic\u istream 및 getline(char\u type*s,streamsize n)


    이것은 cin 구성원 함수입니다.이곳의 첫 번째 매개 변수는 프로그래머가 만든 그룹입니다.그것은 적어도 n개의 칸이 있어야 한다.n-1자는 버퍼에서 추출하여 그룹 s에 넣습니다. 그룹의 n번째 위치는 NUL 문자'\0'을 수신합니다.따라서 수조는 문자열이 됩니다.따라서 그룹 s는 문자 그룹으로 선언해야 합니다.cin.getline () 은 프로그램에서 인코딩을 해야 합니다. 이 입력은 컨트롤러에서 해야 합니다.
    리더는 입력을 사용하여 다음 프로그램을 읽고 테스트해야 합니다.
    aaa bbb ccc ddd eee
    Enter 키를 누르면 eee:
    #include 
    
    using namespace std;
    
    
    int main()
    
    {
    
    cout <
    출력:
    aaa bbb ccc d
    13자가 표시됩니다.프로그램의 for 순환이 정상적으로 작동합니다.즉, 배열의 열네 번째 위치가 "\0"으로 지정됩니다.만약 수조의 크기가 n보다 크면 문자열이 형성되지만 필요한 범위는 비교적 짧다.

    basic\u istream 및 getline(char\u type*s,streamsize n,char\u type delim)


    이 구성원 함수는 상기와 유사합니다.단, n-1 문자가 줄 끝에 나타나기 전에 n-1 문자는 그룹 s로 전송됩니다. 줄 바꾸기 문자가 n-1 문자 앞에 나타나면 모든 줄 (포함하지만 포함하지 않음) 은 그룹으로 전송됩니다.NUL 문자'\0'도 프로그램의 마지막 문자로 배열에 전송됩니다.따라서 n보다 크거나\n이 없는 전체 줄보다 큰 배열의 길이를 추정해야 합니다.
    세 번째 매개변수 delim은\n입니다.델림은 또 다른 캐릭터를 선택할 수 있다.이 경우 검색은\n 전에 중지하거나\n 을 초과할 수 있습니다.다음 프로그램에 대해 다음을 입력합니다.
    aaa bbb ccc ddd eee
    Enter 키를 누르기 전의 모든 문자가 추출됩니다.
    #include 
    
    using namespace std;
    
    
    int main()
    
    {
    
    cout <
    출력:
    aaa bbb ccc ddd eee
    예상대로
    다음 프로그램에서 "\n"을 포함하여 버퍼에 20자가 전송됩니다.단, 구분자delim은 "d"이기 때문에 버퍼에서 12자만 추출할 수 있습니다.입력:
    aaa bbb ccc ddd eee
    이 프로그램은 다음과 같습니다.
    #include 
    
    using namespace std;
    
    
    int main()
    
    {
    
    cout <
    출력:
    aaa bbb ccc
    마지막 "c"뒤에는 12자를 수용할 수 있는 추가 공백이 있습니다.

    getline() 및 String 객체


    getline () 함수는 키보드와 파일 디스크에서 입력을 가져올 수 있습니다.본고의 이 부분은 cin 대상을 통해 키보드에서 프로그램에 입력을 가져오는 것을 논의한다.본고는 파일에서 프로그램으로의 입력을 토론하지 않는다.문자열 라이브러리에는 getline () 에 사용할 네 개의 재부팅 함수가 있습니다.이 네 개의 함수는string류의 구성원 함수가 아니라 라이브러리의 함수입니다.

    basic\u istream&getline(basic\u istream&is,basic\u string&str)


    이 문자열 라이브러리 함수는 getline 함수와 유사하며, 위에서 논의한 구분자delim이 없습니다.단, 수집된 문자를 그룹에 보내는 것이 아니라string 클래스에서 실례화된 string 대상str에 문자를 보냅니다.이 함수의 "is"매개 변수는cin일 수 있습니다.매개 변수의 길이, "is"와str는 추정되거나 미리 확정된 것이 아닙니다.이 구성원 함수와 상술한 상응하는 함수의 차이점은cin을 사용하여 버퍼에서 전체 줄을 수집하고 함수에서 사용하는 줄 바꾸기를 사용하지 않는다는 점이다.프로그램에 문자열 라이브러리를 포함해야 합니다.다음 프로그램은 키보드 입력에서의 사용을 설명합니다.
    aaa bbb ccc ddd eee
    eee를 입력하고 Enter 키를 누릅니다.이 프로그램은 다음과 같습니다.
    #include 
    
    #include 
    
    using namespace std;
    
    
    int main()
    
    {
    
    cout <
    출력:
    aaa bbb ccc ddd eee
    예상대로키보드의 총 문자는 19이며\n은 포함되지 않습니다.출력이 정확합니다. for 순환이 25번 교체되었기 때문입니다.

    basic\u istream&getline(basic\u istream&is,basic\u string&str)


    이 기능은 상기 기능과 유사하지만 이동을 강조합니다.

    basic\u istream&getline(basic\u istream&is、basic\u string&str、charT delim)


    이 문자열 라이브러리 함수는 문자열 클래스 구성원 함수가 아닙니다. 상기 함수와 유사하지만 구분자가 있습니다.단, 줄 끝에 있는 모든 문자는 두 번째 매개 변수str로 전송됩니다. 버퍼의 줄 끝은 세 번째 매개 변수 문자delim에 의해 표시됩니다.delim은\n이어야 합니다.그러나 프로그래머는 줄 끝에 있는 다른 문자를 결정할 수 있습니다.
    다음 프로그램에 대해 다음을 입력합니다.
    aaa bbb ccc ddd eee
    Enter 키를 누르기 전에 모든 문자가 추출됩니다.Enter 키의 결과는\n입니다.
    #include 
    
    #include 
    
    using namespace std;
    
    
    int main()
    
    {
    
    cout <
    출력:
    aaa bbb ccc ddd eee
    다음과 같은 입력이 있는 프로그램에서 Deliter 또는 행 끝 문자는 "d"입니다.
    #include 
    
    #include 
    
    using namespace std;
    
    
    int main()
    
    {
    
    cout <
    출력:
    aaa bbb ccc
    출력의 마지막 "c"뒤에 공백이 있습니다.

    basic\u istream 및 getline(basic\u istream 및 is,basic\u string 및str,charT delim)


    이 기능은 상기 기능과 유사하지만 이동을 강조합니다.

    결론


    getline 함수는 입력에 사용됩니다.입력은 키보드나 파일에서 할 수 있습니다.입력 데이터는 메모리의 버퍼에 문자 시퀀스 형식으로 들어갑니다.프로그래머는 getline () 함수를 작성하여 데이터가 시스템 단위 (메모리 버퍼) 에 들어갈 때 데이터를 얻을 수 있습니다.cin은 버퍼에 대응합니다.getline () 은 블록을 스캔할 때마다 블록 형식으로 데이터를 가져옵니다.카드 디스크는 주어진 수량의 문자일 수도 있고, 임의의 수량의 문자일 수도 있지만, 줄의 꼬리 문자로 구분된다.
    iostream,string,fstream 라이브러리에는 getline () 함수가 있습니다.iostream 라이브러리에 대해 getline () 은cin 대상의 구성원 함수 (다시 불러오기) 입니다.문자열 라이브러리에 대해 getline () 은 라이브러리의 함수 (다시 불러오기) 일 뿐입니다.그것은string류의 구성원 함수가 아닙니다.실제로cin은 문자열 라이브러리의 getline () 함수의 매개 변수입니다.fstream 라이브러리의 getline () 함수에 대해서는 또 다른 토론입니다.