본문 바로가기
C C++/C C++ 유용한 알고리즘 기법

[C/C++] 연속된 숫자 한자리씩 나누어 입력 받기

by Go! Jake 2023. 3. 16.

 

방법 1. scanf 이용하여 나누어 받기

가장 흔한 방법이다. C에서 주로 사용하는 scanf에서는 입력 형식을 지정해주어야한다. 이 때 입력을 "%1d"로 지정하면 된다. 이렇게 지정하면 하나의 정수가 들어오면 입력이 모두 된 것으로 간주하고 다음 입력으로 넘어가게 된다. 같은 방식으로 이중 for문에도 활용할 수 있다.

#include <iostream>
using namespace std;

int main()
{
	int a[10];
	
	for (int i=0; i<10; i++)
	{
		scanf("%1d", &a[i]);
	}
	
	for (int i=0; i<10; i++)
	{
		cout<<a[i]<<endl;
	}
}

 

 

방법 2. string으로 입력받아 나누어 받기

string으로 받아서 나누는 방식이다. string은 인덱스 접근이 가능하다는 점을 이용하는 것이다.

1) string 전체를 받고 2) 각각 인덱스별로 정수로 변경하여 int 배열에 넣는 것이다.

string변수.size()를 통해 string의 크기를 구할 수 있다.

 

왜 아래처럼하면 정수 값으로 변환되는걸까?

실제로 C언어에서 문자는 정수값 취급한다. 정수 연산도 된다. 예를 들어 문자 1 2 3 4도 각각 정수값을 가진다.

문자 0은 48이라는 정수값을 가지고 있으므로 '0'을 기준으로하여 문자끼리 연산하여 정수값처럼 사용하는 것이다.

#include <iostream>
using namespace std;

int main()
{
	int a[10];
	string s;
	cin>>s;
	
	for(int i=0; i<s.size(); i++)
	{
		a[i]=s[i]-'0';
	}
	
	for (int i=0; i<s.size(); i++)
	{
		cout<<a[i]<<endl;
	}	
	
}

 

댓글