Algorithm

[Algorithm] C++ 문자열 공백 포함해서 입력받기(feat. getline(), cin.getline() 사용하기)

용성군 2022. 1. 22. 15:10
728x90
반응형

알고리즘 문제를 풀다보면 띄어쓰기 문자열을 입력받는 경우가 많다. int형은 익숙한데 문자열을 다루는 것에 익숙하지 않아 이참에 정리하고자 한다.


문자열 입력받는 방법(공백 없음)

 

- char 와 scanf 이용해서 입력받기

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {

    cout << "무슨 요일 인가요? : ";

    char day[11];
    scanf("%s",day);

    cout << "오늘은 " << day << "입니다"<< endl;
    
    return 0;

}

 

- char 와 cin 이용해서 입력받기

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {

    cout << "무슨 요일 인가요? : ";

    char day[11];
	cin >> day;

    cout << "오늘은 " << day << "입니다"<< endl;
    
    return 0;

}

- string과 cin으로 입력 받기

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;
int main() {

    cout << "무슨 요일 인가요? : ";

	string day;
	cin >> day;

    cout << "오늘은 " << day << "입니다"<< endl;
    
    return 0;

}
반응형

위와같은 방법은 공백없이 입력받을 때 사용하고 공백이 있다면 공백 전까지만 입력을 받게 되는 문제점이 있다. 

따라서 어떻게 하면 공백을 포함해 입력을 받을 수 있는지 작성하려고 한다. 

 

문자열 입력받는 방법(공백 포함)

 

1.  cin.getline 로 입력받기 (char 사용)

 

cin.getline 형태

cin.getline(char buf[], int size, char delimitChar)

 

cin.getline 예제

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {

    cout << "어떤 스포츠를 좋아하나요?? : ";

    char sports[100];
    cin.getline(sports, 100, '\n');

    cout << "당신은 " << sports << "를 좋아합니다."<< endl;
    
    return 0;

}

 

 

2. getline() 으로 입력받기 (string 사용)

 

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;
int main() {

    cout << "어떤 스포츠를 좋아하나요?? : ";

    string sports;
    getline(cin, sports);

    cout << "당신은 " << sports << "를 좋아합니다."<< endl;
    
    return 0;

}

 


이중으로 입력받기 ( cin.ignore() 사용)

 

공백이 없는 것과 공백을 같이 입력 받기 위해서는 다음과 같이 사용한다. 

 

cin.ignore는 첫 번째 인자로 읽어들일 문자의 개수, 두 번째로 읽어들이면 종료할 문자다. 입력버퍼에 있는 문자를 최대 첫 번째 인자로 지정한 수만큼 읽어들여 버리고, 그리고 두 번째 인자로 지정한 문자를 읽어들이면 그 문자를 마지막으로 읽어들여 버리고 함수가 종료된다.

#include <iostream>
using namespace std;
int main() {
    
    char coffee[11];

    cout << "어떤 커피를 좋아하시나요? : ";

    cin >> coffee;
    cin.ignore(100, '\n');
    cout << "당신은 " << coffee << "을 좋아합니다."<<endl;
    
    
    cout << "어떤 스포츠를 좋아하나요?? : ";

    char sports[100];
    
    cin.getline(sports, 100, '\n');

    cout << "당신은 " << sports << "를 좋아합니다."<< endl;
    
    return 0;
}

cin.ignore(100, '\n') 을 해주는 이유는, 버퍼를 지우기 위해서이다.

728x90
반응형