작성
·
211
0
입력을
4 4
1000
0000
0111
0000
로 하면,
cin >> n >> m;
for(int i = 0; i <n ; i++){
cin >> s;
}
로 알려주셨는데.. 이게 어떻게 저걸 받아들이는건가요?
앞에
int n,m;
string s;
가 있다고 해도 너무 이상해서요..
그리고 뒤에 scanf로 받는거랑 둘중 뭐가 더 좋다 안좋다는 없을까요? (그전에는 뭐가 이왕이면 더 좋다는식으로 써주셧길래 문의드려요)
답변 2
0
정말 감사합니다! :)
'0' 을 배는 이유는 아스키코드표의 0이 0x80 이니 그만큼을 빼서 진짜 숫자 0으로 만들어 주시는거군요
취미쟁이에게 너무 좋은 강의입니다 감사합니다!
0
안녕하세요. ㅎㅎ
1111 등을 하나의 문자열로 받아서
for char : s
이런식으로 문자열을 문자로 분해해서 처리한다는 의미입니다.
교안에 해당 부분을 추가 및 수정했는데요. 다음과 같습니다.
cin으로 받을 때는 개행문자(띄어쓰기, 한줄띄기)까지 받을 수 있다라는 것을 기억해주세요.
#include<bits/stdc++.h>
using namespace std;
int n, m, a[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++){
a[i][j] = s[j] - '0';
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << a[i][j];
}
cout << '\n';
}
}
/*
4 4
1000
0000
0111
0000
1000
0000
0111
0000
*/
위의 코드처럼 문자열 s를 받아 문자열을 문자로 분해(s[j]) 해서 형변환 s[j] - ‘0’을 통해 숫자를 int형 배열인 a[i][j] 배열에 넣는 것을 볼 수 있습니다.
음.. 좋다 안좋다는 없습니다. 여러가지 해보시고 본인이 편한 방식으로 하시면 됩니다.
저는 개인적으로 cin이 편해요.
감사합니다.
맞습니다. ㅎㅎ
문자에서 숫자 형변환은 항상 아스키코드를 유념해두어야 해요.
감사합니다.