c++의 기본

최연재·2022년 7월 7일
0

Algorithm

목록 보기
1/4
  • 형(타입, type)
  • 입력
  • 출력
  • 형변환
  • 문자열

1. 형(타입, type)

1. void

2. char(1바이트)

  • 한 문자만 들어감

3. string(문자열)

  • 여러개의 문자열 받기
  • 보통 char[]을 쓰는 것보다 string을 써서 문제를 푸는 것을 추천
  • 문자 변수는 아스키 코드로 저장되므로, 'A'에 1을 더해주면 'B'

4. bool(1바이트)

5. int(4바이트짜리 정수)

  • 범위 : -2,147,483,648 ~ 2,147,483,647
  • 예상값이 20억을 넘어간다면 int가 아닌 long long을 쓰기
  • 문제를 풀 때 int의 최대값은 20억이 아닌 const int INF = 987654321; 또는 const int INF = 1e9;로 설정 \to 오버플로 방지

6. long long(8바이트짜리 정수)

  • 범위 : –9,223,372,036,854,775,808 ~9,223,372,036,854,775,807

  • int로 표현 안될 때 쓰기

  • long long INF = 1e18; 로 쓰면 됨 \to 문제마다 다르므로 이것은 참고만 하기

7. double(실수형)

  • float도 있지만, double이 더 정확하므로 double 쓰기

8. unsigned long long(8바이트짜리 양의 정수)

  • 범위 : 0 ~ 18,446,744,073,709,551,615
  • 아주 가끔 씀

2. 입력

1. cin & scanf

  • cin
    \to 형식을 기반으로 입력이 주어지지 않는 경우
    \to 개행문자(띄어쓰기, 엔터)를 구분하여 입력 받음
  • scanf
    \to 입력 형식이 정해져있는 경우

2. 따닥따닥 붙어있는 것을 입력받는 방법

  1. string으로 받아서 변환하기
  2. scanf로 받기
  • scanf("%1d", value); 한 자리의 int만 받겠다는 뜻

3. getline

  • "Amenable 화이팅"과 같은 문자열을 한번에 받을려면, string s; getline(cin, s);를 이용

4. 입력이 계속해서 이어질 때

  1. cin의 경우
#include <bits/stdc++.h>
using namespace std;

int n;
int main(){
	while(cin >> n){
		cout << 1 << '\n';
	}
}
  1. scanf의 경우
#include <bits/stdc++.h>
using namespace std;

int n;
int main(){
	while(scanf("%d", &n) != EOF){
		cout << 1 << '\n';
	}
}

3. 출력(cout , printf)

1. cout

  • 문자열 출력에는 보통 cout을 써서 하는게 좋음

2. 실수형 출력

cout.precision(7);
cout << num << "\n";
  • 위의 경우, 7자리에서 반올림하여 6자리까지 출력해주는 것!!

3. printf

  • 형식을 지정해서 출력할 때 좋음
  • printf("Amenable %d");
  • printf("%.06lf\n, num); \to 1.234567

4. 형변환

1. double을 int형으로 만들기

  • int newNum = (int) num;

2. 문자를 숫자로, 숫자를 문자로

5. 문자열

1. reverse

  • 원래의 문자열을 바꿔버림
  • reverse(words.begin(), words.end()); \to 전체 바꾸기
  • reverse(words.begin(), words.begin() + 3); \to 앞에 3개 바꾸기

2. substr

  • 시작지점으로부터 몇 개의 문자열을 뽑아내기
  • words.substr(0, 3);

3. find

  • 어떠한 문자열이 들어있는지 찾기
  • 만약 찾지 못한다면 문자열의 끝 위치인 string::npos를 반환
  • if(words.find("abc") != string::npos)와 같이 이용

4. split

  • C++에서는 문자열을 기반으로 split함수를 지원하지 않음
  • 아래와 같이 split 함수를 만들어서 사용
#include <bits/stdc++.h>
using namespace std;

vector<string> split(string input, string delimiter){
	vector<string> ret;	
	long long pos = 0;
	string token = "":
	while((pos = input.find(delimiter)) != string::npos){ // delimiter가 아직 남았는지 체크
		token = input.substr(0, pos); // substr로 분리
		ret.push_back(token); // vector에 넣기
		input.erase(0, pos + delimiter.length()); // vector에 넣은거까지 삭제
	}
	ret.push_back(input);
	return ret;
}

int main(){
	string s = "안녕하세요 띄워쓰기 테스트 해볼게요!";
	string d = " ";
	vector<string> a = split(s, d);
	for(string b : a) cout << b << "\n";
}

이 글은 큰돌님의 '10주완성 C++코딩테스트 | 알고리즘 IT취업'을 수강하고 정리한 내용입니다.

profile
가보자고

0개의 댓글