3. 문자열

2022. 7. 26. 19:49코딩테스트/C++&자료구조기본

문자열

C++에서 PS를 풀기 위해 사용되는 문자열 함수는 몇개 없습니다.

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;  
string no = "coding is the best!";

int main(){  
    cout << no << "\\n";  
    if(no.find("coding") != string::npos){  
    cout << "no안에 coding있다.\n";  
    }  
    cout << no.substr(0, 3) << endl;  
    reverse(no.begin(), no.end());  
    cout << no << endl;  
    return 0;
}
/*
coding is the best!
no안에 coding있다.
cod
!tseb eht si gnidco
*/

reserve

가지고 있는 문자열을 뒤집어 버립니다.
이때 reverse(startpoint, endpoint) 으로 사용하게 되는데, 문자열 전체를 뒤집고 싶다면

reserve(문자열이름.begin(), 문자열이름.end())와 같이 사용 해도 되지만 일부분만 바꾸고 싶다면,

reserve(문자열이름.begin(), 문자열이름.begin()+3와 같이 부분만 바꿀수도 있습니다

substr

문자열을 부분만 추출합니다.
문자열이름.sbstr(startindex, endindex)로 사용하면 됩니다.

find

문자열에 어떠한 문자열이 있나 확인합니다.찾는다면 그 문자열의 index값이 반환되고, 찾지 못한다면 str::npos를 반환하기 떄문에 조건문을 사용해서 있나 확인합니다.
조건문은 이후에 더 자세히 다루겠습니다.

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) {
    token = input.substr(0, pos);
    ret.push_back(token);
    input.erase(0, pos + delimiter.length());
  }
  ret.push_back(input);
  return ret;
}
int main(){
  string s = "안녕하세요 No.1 코딩이야기 입니다!";
  string d = " ";
  vector<string> a = split(s, d);
  for(string b : a) cout << b << "\n";\
  /*
  안녕하세요
  No.1
  코딩이야기
  입니다!
  */
}

복잡해보이겠지만 while문만 숙지하면 됩니다. 나누는 기준이 되는 delimiter를 설정하고,  find 함수로 기준을 찾고 그것을 기준으로 input을 앞에서부터 지워나가면서 찾는 방법입니다. 함수를 설정하는 방식은 추후에 자세히 설명해드리겠습니다.

'코딩테스트 > C++&자료구조기본' 카테고리의 다른 글

4. 연산자  (0) 2022.07.28
2. C++ 입출력(ps관점)  (0) 2022.07.14
1. C++의 기본 예제와 자료형  (0) 2022.07.08