문자열에 대한 학습
문자들 아스키코드로 출력 : (int)
기본적인 형 변환
string -> int : stoi(x)
char -> int : atoi(x) , x - '0'
int -> char : (char)x
stoi = string to int
stof = string to float
stol = string to long
stod = string to double
대소문자 변환
대문자 -> 소문자 : +32 , tolower
소문자 -> 대문자 : -32 , toupper
문자열에서 숫자 구분해서 출력
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') cout << s[i] - '0';
}
// 아스키 코드를 이용한 방법이다.
문자열에서 특정 문자 제거
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s = "coffee de li cious";
s.erase(remove(s.begin(), s.end(), ' '), s.end());
cout << s << endl;
return 0;
} // 문자열 공백(' ') 자르는 코드
백준 문제풀이
11720번 문제 : 숫자의 합
문제 :
소스코드 :
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, num;
int result = 0;
string s;
cin >> n;
cin >> s;
vector<int> v;
for(int i=0; i<s.length(); i++) {
num = s[i] - '0';
v.push_back(num);
}
for(int i=0; i<v.size(); i++) {
result += v.at(i);
}
cout << result;
return 0;
}
10809번 문제 : 알파벳 찾기
문제 :
소스코드 :
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void put(string k) {
string sen = k;
vector<int> v(26, -1);
int q = 0;
for(int i='a'; i<='z'; i++) {
for(int j=0; j<sen.length(); j++) {
if(sen[j] == i) {
v.at(q) = j;
break;
}
}
q++;
}
for(int i=0; i<v.size(); i++) {
cout << v.at(i) << " ";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s;
cin >> s;
put(s);
return 0;
}
풀이 및 학습 내용 :
a부터 z까지의 모든 값이 -1인 벡터 선언 후
벡터의 각 알파벳의 값을 -1에서 입력받은 문장의 위치에 해당하는 값으로 변경해주면 된다.
2675번 문제 : 문자열 반복
문제 :
소스코드 :
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string put(int a, string b) {
string c = "";
for(int i=0; i<b.length(); i++) {
for(int j=0; j<a; j++) {
c += b[i];
}
}
return c;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t, repeat;
string s;
string result;
cin >> t;
for(int i=0; i<t; i++) {
cin >> repeat >> s;
result = put(repeat, s);
cout << result << "\n";
}
return 0;
}
풀이 및 학습 내용 :
put(int a, string b) 함수 선언,
string c = "" 에서 string b[i]를 a만큼 반복해서 추가하면 된다.
1157번 문제 : 단어 공부
문제 :
소스코드 :
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string put(string word) {
string sen = word;
sort(sen.begin(), sen.end());
int max = 1;
string result;
vector<pair<int,char>> v;
// A와 같은 1자리일 경우 그대로 출력
if (sen.length() == 1) {
return sen;
}
// AABBCCC의 경우
// (1, A) (2, A) (1, B) (2, B) (1, C) (2, C) (3, C) 로 저장
else {
v.push_back(make_pair(1, sen[0]));
for(int i=1; i<sen.length(); i++) {
if (sen[i] == sen[i-1]) {
max++;
v.push_back(make_pair(max,sen[i]));
}
else {
max = 1;
v.push_back(make_pair(max, sen[i]));
}
}
}
// (3, c) ... 와 같이 내림차순 정렬
// second 값이나 원하는 조건으로 정렬 시 사용자 정의 비교함수 생성해 사용
// 여기선 first 값 기준으로 정렬
sort(v.begin(), v.end(), greater<>());
if (v[0].first == v[1].first) {
result = "?";
}
else {
result = v[0].second;
}
return result;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s, ss, result;
cin >> s;
ss = s;
transform(ss.begin(), ss.end(), ss.begin(), ::toupper);
result = put(ss);
cout << result;
}
풀이 및 학습 내용 :
공부하는 차원에서 pair vector와 정렬을 이용해서 함수를 작성해 문제를 해결해보았다.
'C++ 코딩테스트 공부 (중단) > c++ 백준 문제풀이' 카테고리의 다른 글
#7 기본 수학1 - 1 (0) | 2022.04.01 |
---|---|
#6 문자열2 (0) | 2022.03.31 |
#5 함수 (0) | 2022.03.27 |
#4 1차원 배열(2) (0) | 2022.03.26 |
#4 1차원 배열(1) (0) | 2022.03.25 |