πŸ“š Algorithm/πŸ‘€ C++ 문제 풀이

C++ String μ•Œκ³ λ¦¬μ¦˜μ—μ„œ 자주 μ“°μ΄λŠ” λ©”μ„œλ“œ

yunakim2 2023. 2. 6. 22:48
λ°˜μ‘ν˜•
using namespace std;

int main() {
	string a = "love is";
	a += "pain!";
	a.pop_back();
	cout << a << " : " << a.size() << "\n"; // love is pain : 12
	cout << char(*a.begin()) << '\n'; // L
	cout << char(*(a.end()-1)) << '\n'; // n

	a.insert(0, "test ");
	cout << a << " : " << a.size() << "\n"; // test love is pain : 17
	a.erase(0, 5);
	cout << a << " : " << a.size() << "\n"; // love is pain : 12

	auto it = a.find("love");
	if (it != string::npos) {
		cout << "ν¬ν•¨λ˜μ–΄ μžˆλ‹€" << "\n"; // ν¬ν•¨λ˜μ–΄ μžˆλ‹€
	}
	cout << it << "\n"; // 0
	cout << string::npos << "\n"; // 18446744073709551615

	cout << a.substr(5,2) << "\n"; // is
	return 0;

}
  • += : λ¬Έμžμ—΄μ— λ¬Έμžμ—΄μ„ 더할 λ•Œ μ‚¬μš©
    • push_back() 은 문자 밖에 λ”ν•˜μ§€ λͺ»ν•¨
  • begin() : λ¬Έμžμ—΄μ˜ 첫번째 μš”μ†Œ κ°€λ¦¬ν‚€λŠ” μ΄ν„°λ ˆμ΄ν„°
  • end() : λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œ κ·Έ λ‹€μŒμ„ κ°€λ¦¬ν‚€λŠ” μ΄ν„°λ ˆμ΄ν„°
  • size() : λ¬Έμžμ—΄ μ‚¬μ΄μ¦ˆ λ°˜ν™˜
    • O() μ‹œκ°„λ³΅μž‘λ„
  • str.length() : λ¬Έμžμ—΄ μ‚¬μ΄μ¦ˆ λ°˜ν™˜
  • insert(μœ„μΉ˜, λ¬Έμžμ—΄) : νŠΉμ • μœ„μΉ˜μ— λ¬Έμžμ—΄ μ‚½μž…
    • O(n) 의 μ‹œκ°„λ³΅μž‘λ„
  • erase(μœ„μΉ˜, 크기)
    • νŠΉμ • μœ„μΉ˜μ— 크기만큼 λ¬Έμžμ—΄μ„ 지움
    • O(n) μ‹œκ°„λ³΅μž‘λ„
  • pop_back() : λ¬Έμžμ—΄ 끝을 μ§€μš΄λ‹€
    • O(1) μ‹œκ°„λ³΅μž‘λ„
  • find(λ¬Έμžμ—΄) : νŠΉμ • λ¬Έμžμ—΄μ„ μ°Ύμ•„ μœ„μΉ˜λ₯Ό λ°˜ν™˜
    • λ¬Έμžμ—΄μ„ λͺ»μ°Ύμ„ 경우 string::npos λ°˜ν™˜
    • O(n) μ‹œκ°„λ³΅μž‘λ„
  • substr(μœ„μΉ˜, 크기) : νŠΉμ • μœ„μΉ˜μ—μ„œ 크기만큼 λ¬Έμžμ—΄μ„ μΆ”μΆœ
    • O(n) μ‹œκ°„λ³΅μž‘λ„

 

μ•„μŠ€ν‚€ μ½”λ“œμ™€ λ¬Έμžμ—΄

a ~ z 개수 : 26

a ~ z = 97 ~ 122

A ~ Z = 65 ~ 90

 

λ¬Έμžμ—΄ -> 숫자둜 좜λ ₯ν•˜κΈ°

int main() {
	char a = 'a';
	cout << (int)a << '\n'; // 97
	cout << (int)a - 97 << '\n'; // 0
	cout << (int)a - 'a' << '\n'; // 0

}

숫자 ASCII μ½”λ“œ -> λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•˜κΈ°

cout << char(i + 97) // 'a'
cout << char(j + 65) // 'A'

 

숫자둜된 λ¬Έμžμ— ++ 증감 μ—°μ‚°μžλ‘œ 1을 λ”ν•˜κ²Œ λœλ‹€λ©΄?

  • μ•„μŠ€ν‚€μ½”λ“œμ— +1 ν•œ 값이 됨!
string s = "123";
s[0]++;
cout << s << "\n"; // 223

-> s[0] ++ 으둜, 223이 λœλ‹€

  • μ•„μŠ€ν‚€ μ½”λ“œ 49μ—μ„œ 1을 λ”ν•œ 값인 '50'이 κ°€λ¦¬ν‚€λŠ” 값이 '2' μ΄λ―€λ‘œ
  • 123 μ—μ„œ 223이 될 수 μžˆλ‹€
  • λ¬Έμžμ—΄μ—μ„œ + ν•˜λŠ” 연산은 μ•„μŠ€ν‚€ μ½”λ“œ 기반으둜 μˆ˜ν–‰λœλ‹€

 

λ¬Έμžμ—΄ 거꾸둜 뒀집기 STL - reverse()

using namespace std;
int main(){
    string a = "It's hard to have a sore leg";
    reverse(a.begin(), a.end());
    cout << a << '\n';
    reverse(a.begin(), a.end());
    cout << a << '\n';
    reverse(a.begin() + 3, a.end());
    cout << a << '\n';
    return 0;
}
/*
gel eros a evah ot drah s'tI
It's hard to have a sore leg
It'gel eros a evah ot drah s
*/

 

 

λ¬Έμžμ—΄ 자λ₯΄κΈ° split()

C++μ—μ„œλŠ” split ν•¨μˆ˜λ₯Ό μ§€μ›ν•˜μ§€ μ•Šμ•„μ„œ 직접 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€!

 

vector<string> split(string input, string delimiter) {
	vector<string> ret;
	long long pos = 0;
	string token = "";
	while((pos = input.find(delimiter)) != string::npos) {
		token = input.substr(0, pos);
		ret.push_back(token);
		input.erase(0, pos + delimiter.length());
	}

	ret.push_back(input);
	return ret;

}

input - λ¬Έμžμ—΄

delimiter - κ΅¬λΆ„μž

κ΅¬λΆ„μžμ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„μ„œ input λ¬Έμžμ—΄μ„ κ΅¬λΆ„μž μ „κΉŒμ§€ 자λ₯Έ ν›„, 'token'값에 λ„£λŠ”λ‹€.

κ·Έκ±Έ ret 벑터에 넣은 ν›„, input λ¬Έμžμ—΄μ—μ„œ μ§€μ›Œμ€€λ‹€.

 

 

λŒ€λ¬Έμž -> μ†Œλ¬Έμž / μ†Œλ¬Έμž -> λŒ€λ¬Έμž λ³€ν™˜

λ¬Έμžμ—΄μ—μ„œ + , - λŠ” μ•„μŠ€ν‚€μ½”λ“œ 기반으둜 λ™μž‘λ˜λ―€λ‘œ

λ¬Έμžμ—΄ 자체λ₯Ό λ”ν•˜κ±°λ‚˜ λΉΌμ£Όμ–΄ λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€!

if ((str >= 'a') && (str <= 'z')) {
    answer.emplace_back(str - 'a' + 'A');
} else {
    answer.emplcae_back(str - 'A' + 'a');
}

 

 

 

λ¬Έμžμ—΄ 숫자 -> 숫자둜 λ³€ν™˜

#include <iostream>


int main() {
	int num = stoi("1234"); // 1234
}
  • stoi : string to integer
  • stol : string to long int
  • stoul : string to unsigned integer
  • stoll : long long
  • stoull : unsigned long long
  • stof : string to float
  • stod : string to double
  • stold : long double

 

숫자 -> λ¬Έμžμ—΄ 숫자둜 λ³€ν™˜

#include <string>

std::string s = std::to_string(10); // '10'


#include <string>

int num2 = s - '0';
λ°˜μ‘ν˜•