GetLine() 함수 

문제점 1) 가나다 라마바 사아자 라고 입력이 되었다고 치면 cin 또는 scanf로 입력 받을 시 가나다에서 끊기고 만다.

해결 : getline 함수를 이용

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>

using namespace std;

int main()
{
 
	char name[20];
	char dessert[20];
	
	cout << "name" << endl;
	cin.getline(name, 20);  //20글자 까지 받을 수 있다.
	cout << "dessert" << endl;
	cin.getline(dessert, 20);

	cout << "good" << dessert;
	cout << "dessert " << name << "sir " << endl;

	return 0;
}

 

문제점 2) 위의 코드로 입력 받을 시 한글이 무조건 깨진다.

이유 : ASCIII (거의 100%이거 때문임) ->

해결 : 멀티바이트 문자 집합 이용 (거의 100% 이게 해결법임)

단, 해당 문자 집합을 이용하면 그에 맞는 함수도 가져가야한다.

한글을 출력하기 위해서는 로케일 설정을 한국으로 바꿔줘여한다.

 

전체 로케일 설정

  • locale::global(locale("kor"));

부분 로케일 설정

  • wcout.imbue(locale("kor"));

코드

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>

using namespace std;

int main()
{
	wcout.imbue(locale("kor"));//한국으로 지역설정
	wcin.imbue(locale("kor")); 
	wchar_t name[20];
	wchar_t dessert[20];
	
	wstring str1;
	wstring str2; 

	wcout << "name" << endl;
	wcin.getline(name, 20);
	wcout << "dessert" << endl;
	wcin.getline(dessert, 20);

 
	wcout << "good" << dessert;
	wcout << "dessert " << name << "sir " << endl;


	return 0;
}

 

만약 wchar_t가 아닌 string에 담고 싶다면 string 대신 wstring을 사용한다.

코드 

	wcout.imbue(locale("kor"));//한국으로 지역설정
	wcin.imbue(locale("kor"));
    
	wstring str1;
	getline(wcin, str1);

 

 

 

'Algorithm > Algorithm_Tip' 카테고리의 다른 글

[Java 입출력] StringTokenizer  (0) 2020.09.08
[JAVA 입력 TIP]  (0) 2020.09.08
[탐색] 이분탐색 lower_bound, upper_bound  (0) 2020.07.21
순열&조합  (0) 2020.07.13
입력 팁  (0) 2020.06.28

lower_bound란

이진탐색(Binary Search)기반의 탐색 방법. (배열 또는 리스트가 정렬 되어야 있어야함.)

 : 찾고자 하는 값 이상의 값이 처음 나타나는 "위치" 

	int arr[10] = {1,2,4,5,6,6,7,7,7,9 };
	//lower_bound : 정수 값 찾음
	cout << "lower_bound(6) : " << lower_bound(arr, arr + 10, 6) - arr  << endl; //4
	cout << "lower_bound(7) : " << lower_bound(arr, arr + 10, 7) - arr  << endl; //6
	cout << "lower_bound(8) : " << lower_bound(arr, arr + 10, 8) - arr  << endl; //9
	cout << "lower_bound(9) : " << lower_bound(arr, arr + 10, 9) - arr  << endl; //9

단, 만약 못찾으면 찾고자 하는 값 배열의 마지막 위치를 반환한다.

 

 

upper_bound

lower_bound와 마찬가지로 이진탐색기반의 탐색법 이진탐색(Binary Search)기반이므로 배열이나 리스트가 오름차순으로 정렬 되어야한다.

 : 찾고자 하는 값 초과하는 값이 처음 나타나는 "위치"

	cout << "upper_bound(6) : " << upper_bound(arr, arr + 10, 6) - arr  << endl; //6
	cout << "upper_bound(7) : " << upper_bound(arr, arr + 10, 7) - arr  << endl; //9
	cout << "upper_bound(8) : " << upper_bound(arr, arr + 10, 8) - arr  << endl; //9
	cout << "upper_bound(9) : " << upper_bound(arr, arr + 10, 9) - arr  << endl; //10

단, 만약 못찾으면 찾고자 하는 값 배열의 마지막 위치를 반환한다.

 

'Algorithm > Algorithm_Tip' 카테고리의 다른 글

[Java 입출력] StringTokenizer  (0) 2020.09.08
[JAVA 입력 TIP]  (0) 2020.09.08
[입력] getline으로 한 줄 띄어쓰기 까지 다 받아오기  (0) 2020.08.06
순열&조합  (0) 2020.07.13
입력 팁  (0) 2020.06.28

개념

조합(Combination) : 순서 바뀜 허용 안함, 중복 허용 안함, nCr = n! / r! * (n-r)!

순열(Permutation) : 순서 바뀜 허용,         중복 허용 안함, nPr = nCr x r!

*순서 바뀜

ex) 1 1 2 & 1 2 1 --> Per 허용, Com 허용X

 

ex) {1,2,3} 

조합(3C2): {1,2}, {2,3}, {3,1}

순열(3PC) : {1,2}, {2,1}, {2,3}, {3,2}, {3,1}, {1,3}

 

조합(3C2) : {1,2,3}

순열(3PC) : 3개의 우너소로 조합 가능한 모든 구성 : 3P3 (nPn = n!) 

{1,2,3}, {1,3,2}, {2,1,3}, {2,3,1}, {3,1,2}, {3,2,1} 

 

순열(Permutation)는 w=0

조합(Combination)은 w=num

단, 중복을 허용할 시 visit배열을 없애 준다.!!

 

코드

void Permutition(int ctttt, int num )
{
	if(ctttt==3)
	{
		vector <int > ans;		
		for(int i = 0 ; i < vvvvv_.size() ; i++)
		{
			cout <<" " <<vvvvv_[i]   ; 
		}
		cout<< endl;
		return ;
	}

//permu는 w=0 
	for(int w= 0 ; w<5 ;w ++)
	{
		if(!vii[w])
		{	vii[w]=true;
		vvvvv_.push_back(ex_Num[w]); //0	
		Permutition(ctttt+1,w);
		vvvvv_.pop_back(); 
		vii[w] =false;
		} 
	}

}
void Combination(int ctttt, int num )
{
	if(ctttt==3)
	{
		vector <int > ans;		
		for(int i = 0 ; i < vvvvv_.size() ; i++)
		{
			cout <<" " <<vvvvv_[i]   ; 
		}
		cout<< endl;
		return ;
	}

//combi는 w=num
	for(int w= num ; w<5 ;w ++)
	{
		if(!vii[w])
		{	vii[w]=true;
		vvvvv_.push_back(ex_Num[w]); //0	
		Combination(ctttt+1,w);
		vvvvv_.pop_back(); 
		vii[w] =false;
		} 
	}

}

1) n*m 문자열 (띄어쓰기X) 입력 받기

	char arr[20][20];
	int n, m; //n*m
	cin >> n;
	cin >> m;
	//input()
	for (int i = 0; i < n; i++)
	{
		string s;
		cin >> s;
		for (int j = 0; j < m; j++)
		{	
			arr[i][j] = s[j];
		}
	}

 

+ Recent posts