c++ 문자열 다루는 법 정리

이주희·2023년 11월 25일
0

stoi

string을 int로 전환

int num = std::stoi(str);

to_string

int를 string으로 전환
string s = std::to_string(n);

substr

특정 부분 잘라서 가져오기

std::string newstr1 = str.substr(0, 5);
str의 0부터 4 전까지를 가져와 string으로 만든다

string news = str.substr(0, str.find(" "));
공백 앞 단어를 news로 가져온다

find

특정 문자열 찾을 때 사용
찾고자 하는 문자열의 시작위치를 수로 반환한다

int index = s.find("a");
a가 맨 처음 등장하는 위치 리턴

int index = s.find("a",7);
7번째부터 a가 나오는 위치 리턴

존재하지 않다면 string::npos를 리턴한다
npos란 : -1를 가지는 상수로 못찾을 때 리턴됨!

erase

(vector 헤더)

특정 위치의 문자들 삭제
str.erase(0,4);

remove

( algorithm 헤더)

first부터 last 전까지 val과 값이 일치하는 원소를 제거함
ex)
remove(str1.begin(), str1.end(), ' ')으로 사용하면 공백은 줄어드는데, 문자열 길이가 줄어드는 것은 아니다..
삭제 후 생성된 문자열 바로 뒤의 위치 iterator 반환함

따라서 erase와 함께 사용한다
s.erase(remove(s.begin(), s.end(),' ' ), s.end());
s 문자열에서 remove을 사용하고 남은 문자열 지워서 반환한다는 뜻

toupper, tolower

대소문자 변환시 사용
toupper(), tolower() 사용
ex)
char tmp = toupper(tmp);

replace

지정 위치를 다른 문자열로 치환함
string ans = str1.replace(0,2,"zz");
str1의 처음, 두번째 빠지고 zz가 들어옴

regex_replace

#include <regex> 필요
지정한 문자열과 일치하는 모든 문자열을 제거한다

regex_replace.(대상문자열, regex(정규식), 치환문자열) 형식으로 사용

ex)
string str1 = regex_replace("aaa-bbb-ccc-ddd", regex("a"), "z");

모든 "a"가 "z"로 변환된다

c++ 공백 분리

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int main(){

    string input = "abc def ghi";

    // 문자열을 스트림화
    stringstream ss(input);

    vector<string> tmp;

    string word;
    // 스트림을 한 줄씩 읽어, 공백 단위로 분리한 뒤, 결과 배열에 저장
    while (getline(ss, word, ' ')){
        tmp.push_back(word);
    }

}

reverse

algorithm 함수에 있음
reverse(str.begin(), str.end()) 방식으로 사용
바로 출력하면 안됨!! (리턴값이 이상하다)
reverse 함수 써주면 해당 string이 뒤집히고, 이후에 string 사용해야함 ( being, end 사용해서 그런듯하다)

0개의 댓글