Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MCU 딥러닝
- tflite
- 코딩테스트
- 임베디드 딥러닝
- 초소형머신러닝
- 딥러닝
- 코테 문제
- 포스코 교육
- 영상처리
- TensorFlow Lite
- DP문제
- 다이나믹프로그래밍
- 포스코 AI교육
- tinyml
- 삼성코테
- 삼성역테
- bfs문제
- 포스코 ai 교육
- 알고리즘
- 컴퓨팅사고
- 그리디
- dfs
- 삼성역량테스트
- sort
- dfs문제
- 코테
- BFS
- 자료구조
- 삼성코딩테스트
- DP
Archives
- Today
- Total
코딩뚠뚠
[개념정리] C/C++ 여러 input방법에 대해 본문
반응형
삼성 역량테스트를 C++로 준비하며 필요한 input의 방법들을 공부하며 정리해봤다.
1. 길이를 알고있는 숫자를 입력하고 이를 한글자씩 잘라서 input을 받아야 하는 상황
ex) 입력 : 길이 7의 숫자 1234567를 한번에 입력해야되고,
이를 1 / 2 / 3 / 4 / 5 / 6 / 7 이렇게 따로 받아야 되는상황
int a[7];
for(int i=0;i<7;i++){ //7개의 수를 받겠다.
scanf("%1d",&a[i]); //한글자씩 받아서 a배열에 넣기
}
2. 몇 개를 받는지 모르고 한글자씩 입력받기
ex) 띄어쓰기 없이 12345 입력했을때 한글자씩 입력받는것
#include <iostream>
#include <string>
using namespace std;
int temp = 0;
int main() {
string a;
cin >> a;
for (int i = 0; i < a.size(); i++) {
temp += a[i] - '0';
}
return 0;
}
3. 공백을 포함해서 받는방법
ex) 입력 : "abc de fg" 를 name에 한번에 저장하기
string name;
getline(cin,name);
char name[1000];
gets_s(name,1000);
4. 띄어쓴 입력을 분류해서 받는방법
-> 길이를 알면
1. scanf("%d %d", &a, &b);
2. cin >> s1 >> s2;
3. for(int i=0; i<N; i++){
cin >> a[i];
}
-> 길이를 아는데 사이즈가 크면 scanf로 못받을까?
input : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 100
for (int i = 0; i < 100; i++) {
scanf(" %d", &a);
}
위와 같이 scanf 안에 공백을 넣어준다 => 개행 문자를 무시해준다.
-> 길이를 모르면 (문자)
ex) a b c d 가 입력으로 들어왔을때 하나씩 입력이 들어갈 수 있게끔
공백문자를 기준으로 문자열을 자르고 넣기 (주석 참조)
#include <iostream>
#include <string>
using namespace std;
string str_arr[1000];
int str_cnt=0;
int main() {
//string 변수 a 선언
string a;
//띄어쓰기를 포함한 전체 입력을 받는다.
getline(cin, a);
//받은 입력을 C의 형식으로 char buffer에 넣어주기 위한 변수선언. new는 malloc과 같은 동적할당 수행
char* str_buff = new char[1000];
//받은 입력 string a를 str_buff에 넣어준다.
strcpy(str_buff, a.c_str());
//strtok이 포인터를 반환하기때문에 tok을 포인터로 선언. 띄어쓰기를 기준으로 나눈다.
char* tok = strtok(str_buff, " ");
//tok을 살피며 끝이 아니라면 계속 진행한다.
while (tok != nullptr) {
//str_arr에 값을 추가한다.
str_arr[str_cnt++] = string(tok);
//띄어쓰기를 기준으로 나누어 다음 문자를 tok에 저장한다.
tok = strtok(nullptr, " ");
}
for (int n = 0; n < str_cnt; n++) {
cout << str_arr[n] << endl;
}
return 0;
}
-> 길이를 모르면 (숫자)
ex) 1 2 0 3 이 입력으로 들어왔을 때 하나씩 입력이 들어갈 수 있게끔
#include <iostream>
#include <string>
using namespace std;
char str[40];
int num=0;
int list[100];
int cnt = 0, i;
int main() {
//gets_s 로 char입력을 받아 한글자씩 처리해주자.
gets_s(str, 40);
for (int i = 0; cnt < 40 && str[i]; i++) {
if (str[i] != ' ') {
//char에서 -'0' 하면 int형이 된다.
num = num * 10 + str[i] - '0';
}
else {
if (num > 0) {
list[cnt++] = num;
num = 0;
}
}
}
return 0;
}
5. 문자열 input
#include<string> 으로 사용가능
string s1;
string s2;
s1="john";
s2="sam";
a = s1[0]; // j
b = s1[1]; // o
c = s1[2]; // h
d = s1[3]; // n
e = s1+s2; // johnsam
6. 2차원배열 input
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
cin >> a[i][j];
}
}
계속 업데이트 예정이니 더 알고싶은 input의 방법이 있다면 댓글 남겨주세요~!
끝!
반응형
'알고리즘 문제풀이 > 개념정리' 카테고리의 다른 글
[개념정리] DP 동적프로그래밍 (2) | 2020.12.27 |
---|---|
[개념정리] STL _ 순열구하기 permutation (0) | 2020.12.27 |
[개념정리] C++ 수식함수들 (0) | 2020.12.27 |
[개념정리] priority_queue (0) | 2020.12.26 |
[개념정리] deque container (0) | 2020.12.26 |