728x90
코딩 테스트에서 아래와 같이 입력이 붙어있는 경우가 있습니다.
string 으로 변환
문자열 s를 받아 문자로 분해(s[j])하여 ASCII 타입 변환(s[j] - '0')으로 int문자 타입 배열 a[i][j] 에 넣습니다.
#include <bits/stdc++.h>
using namespace std;
int n, m, arr[10][10];
string s;
int main() {
cin >> n >> m;
for(int i=0 ; i<n ; i++){
cin >> s;
for(int j=0 ; j<m ; j++){
arr[i][j] = s[j] - '0';
}
}
...
}
scanf 로 받기
%d 앞에 1을 붙이면 "한자리의 int"만을 받겠다는 뜻이 되어 받을 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
int n, m, arr[10][10];
int main() {
scanf("%d %d", &n, &m);
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<m ; j++){
scanf("%1d", &a[i][j]);
}
}
...
}
그러나 scanf 사용 시 문자 타입(char) 입력에서 다음과 같이 주의해야 합니다.
다음 코드처럼 띄어쓰기를 %c 앞에 넣어 입력을 받아야 합니다.
...
scanf(" %c", &a[i][j]);
...
숫자인 %d 로 입력을 받게되면 이런 형상이 일어나지 않지만 c로 받게 되면 특수문자, 엔터를
문자로 취급해서 입력을 받기 때문에 이렇게 신경 써주어야 합니다.
char 타입 & cin
char 타입으로 2차원 배열을 정의했을 때는 다음 코드처럼 cin으로 그냥 받을 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
char arr[54][54];
int main() {
for(int i=0 ; i<2 ; i++){
for(int j=0 ; j<4 ; j++){
cin >> arr[i][j];
}
}
...
}
cin으로 int 타입을 입력 받게 되면 여러 개의 문자들이 입력으로 오는 것을 기다렸다가
개행 문자 직전까지 입력을 받지만 char 같은 경우 한 문자까지 밖에 입력을 못 받기 때문에
개행 문자가 없어도 개행 문자가 있는 것과 같은 역할을 합니다.