문자열 String 클래스 멤버함수 정리
-
string str1 = “BlockDMask”;
-
string str2 = “BlogBlogBlogBlog”; 인 상태에서 시작
String 인자 접근, Access 관련
str.at(인덱스)
- str1.at(0); //”BlockDMask” -> ‘B’를 리턴합니다.
str.front(), str.back()
- str1.front(); //”BlockDMask” -> ‘B’를 리턴합니다.
- tr1.back(); //”BlockDMask” -> ‘K’를 리턴합니다.
String 사이즈 관련
str.size() = str.length()
- str1.size(); // “BlockDMask” 이므로 10을 반환합니다.
str.clear()
- str1.clear(); //”BlockDMask” -> “” 이 됩니다. size와 lenth는 0이 되고, capacity는 15 그대로 입니다. (메모리 해제가 아닌 문자열 값 삭제하는것)
str.empty()
- if(str1.empty()) { return true; }
String 다양하게 가지고 놀기
str.substr()
str1.substr();
//”BlockDMask” 그대로 반환합니다.str1.substr(5);
// “DMask”를 반환합니다. 0부터 세기 시작해서 “5” 번째 인자부터 끝까지의 문자열을 반환합니다.-
str1.substr(5, 1);
// “D”를 반환합니다. 5번째 인자부터, 1의 길이만큼 문자열을 반환합니다. - 문자열을 정수로 바꾸기(프로그래머스)
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
if(s[0] == '-'){
answer = (-1) * stoi(s.substr(1));
}else if(s[0]== '+'){
answer = stoi(s.substr(1));
}else{
answer = stoi(s);
}
return answer;
}
str.replace()
str1.replace(5, 2, str2);
// “BlockDMask”의 5번째 인자에서부터 2개를 str2로 대체하게 됩니다. 그러면 “BlockBlogBlogBlogBlogask”
str.compare()
str1.compare(str2)
// c가 g보다 사전상 더 앞선글자이기 때문에 c가 더 작은 글자가 됩니다. 그렇기 때문에 음수(-1)를 반환str2.compare(str1);
// 양수(1)을 반환str1.compare("BlockDMask");
//이 경우에는 두 스트링이 같기 때문에 0을 반환str1.compare(0, 2, str2);
// str1인 “BlockDMask”의 0번째 인덱스 부터 길이가 2인 문자열 “Bl”과 str2인 “BlogBlogBlogBlog” 를 비교합니다. 두 문자열이 다르기 때문에 0이 아닌 수를 반환str1.compare(0, 2, str2, 4, 2);
//str1의 “BlockDMask”의 0번째 인덱스 부터 길이 2인 문자열 “Bl”과 str2 문자열 “BlogBlogBlogBlog” 3번째 인덱스 부터 길이가 2인 문자열인 “Bl”을 비교합니다. 비교할 문자열이 같기 때문에 0을 반환
str.copy()
int arrLen = str1.copy(arr, 3, 5);
//5번째 index부터 3의 길이만큼 복사 한다는 거니까 Mask부분이 들어갔을겁니다. 그리고 반환하는 arrLen은 3
str.find()
- str2.find(“Blog”); // “BlogBlogBlogBlog” -> 0 을 반환
-
str2.find(“Blog”, 5); // 5번째 인자부터 blog를 찾게되니 BlogB
l
ogB
logBlog 표시된 l에서부터 찾게됨, b의 위치인 8을 반환할 것 - 서울에서 김서방찾기 (프로그래머스)
#include <string>
#include <vector>
using namespace std;
string solution(vector<string> seoul) {
string answer = "김서방은 ";
for(int i=0; i<seoul.size(); i++){
if(seoul[i].find("Kim")==0){
answer += to_string(i);
}
}
answer += "에 있다";
return answer;
}
문자열 중 숫자가 들어갔는지 판별
isdigit 함수
활용!
#include <string>
using namespace std;
bool solution(string s) {
if(s.size()!=4 && s.size()!=6){
return false;
}
for(char c:s){
if(isdigit(c)==false)
return false;
}
return true;
}
문자열 내 마음대로 정렬하기 (프로그래머스)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int g ;
bool compare(string a, string b){
if(a[g] != b[g]){
return a[g] < b[g];
}else{
return a < b;
}
}
vector<string> solution(vector<string> strings, int n) {
g = n;
sort(strings.begin(), strings.end(), compare)
return answer;
}
string stream 이용하기
- 오픈채팅방(프로그래머스)
#include <string>
#include <vector>
#include <sstream>
#include <map>
using namespace std;
vector<string> solution(vector<string> record) {
vector <string> answer;
vector <string> uid; //record에서 아이디만 따로 저장
map <string, string> nick_Info; //key:아이디 / value:닉네임
stringstream ss; string action; string id; string nickname;
for (int i = 0; i < record.size(); i++) {
ss.str(record[i]);
ss >> action; //Enter, Leave, Change
if (action == "Enter") {
ss >> id;
ss >> nickname;
answer.push_back("님이 들어왔습니다.");
uid.push_back(id);
nick_Info[id] = nickname;
}
else if (action == "Leave") {
ss >> id;
answer.push_back("님이 나갔습니다.");
uid.push_back(id);
}
else {
ss >> id;
ss >> nickname;
nick_Info[id] = nickname;
}
ss.clear();
}
for (int i = 0; i < answer.size(); i++) {
answer[i] = nick_Info[uid[i]] + answer[i]; //아이디에 해당하는 닉네임을 붙여줌
}
return answer;
}
알파벳 대소문자 확인
-
tolower, toupper 사용
-
대소문자 구분 X
strcasecmp
함수를 사용
string text1 = "Hey! Mr. Tambourine man, play a song for me"; string text2 = "hey! Mr. Tambourine man, PLAY a song for me"; string text3 = "Hey! Mrs. Tambourine man, play a song for me"; if (strcasecmp(text1.c_str(), text2.c_str()) == 0) { cout << "strings: text1 and text2 match." << endl; //결과 출력 } else { cout << "strings: text1 and text2 don't match!" << endl; }
공백이 포함된 문자열 입력
-
getline(cin, str)
이용! -
문서검색(백준) - 1543
#include <vector>
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
int main(){
string s;
string t;
int cnt = 0;
getline(cin, s);
getline(cin, t);
while(s.find(t) != -1){
int index = s.find(t);
s = s.substr(index + t.size());
cnt++;
}
cout << cnt << '\n';
}