본문 바로가기

C++

[C++] 문자열, 입력

C++에서 문자열을 사용하는 방법은 두 가지가 있다.


1. char 배열 사용

char str[5] = { 'a', 'b', 'c', 'd', 'e' };

이 방식은 C언어에서 쓰던 방식과 같다.


문자열 입력

cin으로 문자열을 입력받게 되면 띄어쓰기, tab, enter 단위로 잘라서 받기 때문에 공백을 포함한 문자열을 한번에 입력받을 수 없다.

#include <iostream>

int main() {
	char arr[100];
	std::cin >> arr;
	std::cout << arr;

	return 0;
}

결과


따라서 공백을 포함한 문자열을 입력받을 때, cin.getline()함수를 사용한다.

#include <iostream>

int main() {
	char arr[100];
	std::cin.getline(arr, 100);
	std::cout << arr;

	return 0;
}

결과



iostream에 정의되어 있는 것을 보면, delimiter(구분문자)를 매개변수로 넘길 수 있으며 기본적으로는 \n(엔터)를 구분자로 처리한다는 것을 볼 수 있다.

basic_istream& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count)
	{	// get up to _Count characters into NTCS, discard newline
		return (getline(_Str, _Count, _Myios::widen('\n')));
	}

basic_istream& __CLR_OR_THIS_CALL getline(_Elem *_Str,
	streamsize _Count, _Elem _Delim)
	{	// get up to _Count characters into NTCS, discard _Delim
		//...
		return (*this);
	}




2. string 사용

C++에서는 string이라는 클래스를 사용할 수 있다.

string 클래스는 문자 길이에 제한이 없고, 표준 클래스이므로 주로 문자열을 사용할 때에는 배열보다는 string클래스를 사용한다.


string 클래스는 string 헤더파일에 선언되어 있어 아래 구문을 추가해야 한다.

#include <string>


문자열 입력

string 클래스의 경우, 문자열을 입력받을 때는 string파일의 getline()함수를 사용한다.

#include <iostream>
#include <string>

int main() {
	std::string str;
	getline(std::cin, str);

	std::cout << str;

	return 0;
}

결과



getline()함수가 선언되어 있는 string파일을 살펴보면, 아래와 같이 오버로딩되어 있는 것을 확인할 수 있다.

delimiter(구분문자)를 지정하지 않으면, 기본적으로 \n(엔터)로 구분되는 것도 확인이 가능하다.

template<class _elem,="" class="" _traits,="" _alloc=""> inline
	basic_istream<_Elem, _Traits>& getline(
		basic_istream<_Elem, _Traits>&& _Istr,
		basic_string<_Elem, _Traits, _Alloc>& _Str,
		const _Elem _Delim)
	{	// get characters into string, discard delimiter
		//...
	return (_Istr);
	}

template<class _elem,="" class="" _traits,="" _alloc=""> inline
	basic_istream<_Elem, _Traits>& getline(
		basic_istream<_Elem, _Traits>&& _Istr,
		basic_string<_Elem, _Traits, _Alloc>& _Str)
	{	// get characters into string, discard newline
	return (getline(_Istr, _Str, _Istr.widen('\n')));
	}

template<class _elem,="" class="" _traits,="" _alloc=""> inline
	basic_istream<_Elem, _Traits>& getline(
		basic_istream<_Elem, _Traits>& _Istr,
		basic_string<_Elem, _Traits, _Alloc>& _Str,
		const _Elem _Delim)
	{	// get characters into string, discard delimiter
	return (getline(_STD move(_Istr), _Str, _Delim));
	}

template<class _elem,="" class="" _traits,="" _alloc=""> inline
	basic_istream<_Elem, _Traits>& getline(
		basic_istream<_Elem, _Traits>& _Istr,
		basic_string<_Elem, _Traits, _Alloc>& _Str)
	{	// get characters into string, discard newline
	return (getline(_STD move(_Istr), _Str, _Istr.widen('\n')));
	}


'C++' 카테고리의 다른 글