글쓴이는 코딩테스트를 위한 준비로 C++ 공부를 하고 있으며,
다음 내용은 글쓴이가 자주 헷갈리는 string 함수만 정리해 놓은 것임을 알립니다!
앞으로 이야기할 함수들은 모두 헤더파일 string에 있는 아이들이다.
#include <string>
.find()
int findPos = input.find(cmp,pos);
pos의 위치부터 cmp 문자열을 찾아서 발견 index값을 리턴해주는 메서드다.
cmp("123")가 temp에 몇개 있는지 세는 알고리즘이다.
string temp = "12345671234567";
string cmp = "123";
int cnt=0;
int pos=0;
while(1){
int findPos = temp.find(cmp,pos); //pos값이 계속 바뀌면서 cmp를 찾는다.
if(findPos == temp.npos) break; //더 이상 cmp 없을때 반복문 빠져나온다.
cnt++;
pos = findPos+1; // 다음 위치부터 찾아야 하기 때문에 +1 해준다.
}
cout<< cnt;
.npos
find를 하다보면 npos가 나올 수 밖에 없다.
find에서 값을 못찾을때 npos가 리턴된다.
상수 -1로도 통한다.
.substr()
문자열을 자르는 메서드로 substring가 아니다..!!!!!
string temp="123456789";
string next=temp.substr(pos,cnt);
temp 문자열을 pos 인덱스 위치부터 cnt 개수만큼 잘라서 문자열을 리턴해주는 메서드다.
next = temp.substr(2,5); //34567
위와 같은 코드라면 temp에서 2번위치부터 5개를 뽑는 코드이다.
즉, 3부터 5개로 "34567"
.erase()
문자열 사이를 지워준다.
string temp="123456789";
temp.erase(2, 5);
cout << temp; // 1289
temp 문자열을 pos 인덱스 위치부터 cnt 개수만큼 버린다.
언뜻보면 위 substr() 메서드와 같은 맥락인 것 같아보이지만 크게 다른 점이 있다.
erase 메서드는 string 자신에게 적용된다. (원본손상)
반면 substr을 이용하면 원본은 유지되고, 잘린 문자열을 리턴해주기 때문에 다른 string에 할당에 주어야한다.
to_string()
string형으로 변환해주는 함수
이건 함수인지 메서드인지 헷갈리기도 하고,
이름도 tostring인지 tostr인지 자주 헷갈려서 매번 다시 찾아보게 되는 함수다..
함수!! 며 to_string으로 언더바가 있다는거 기억 꼬오오옥!!! 하기~
cout<<to_string(123); // "123"
cout<<to_string(123.567); // "123.567000"
사용법은 쉽다. 인자는 int형이든 double형이든 어떤 것이든 상관없다.
stoi()
C언어 에서는 char to int 로 atoi를 이용한다..
그거랑 가끔 헷갈림..
stoi는 string to int 이다!! 쪼잔하게 C처럼 한글자씩 안해도 된다!! 매우 편리한 것 ^-^
int number = stoi("1"); // number = 1;
isdigit()
근데 만약 인자로 숫자형태가 아닌 string이 들어간다면 오류가 난다.
그러니까 꼭 isdigit()로 숫자형인지 확인해줘야한다.
근데 얘는 ctype.h 에서 나온애라 쪼잔하게 char형만 확인가능하다.
이것도 함수! 라는것 기억하기!!!
string str="1";
if(isdigit(str)){ //숫자면 1, 숫자아니면 0
cout<< stoi(str);
} else {
cout<<"숫자 아님";
}
isdigit()과 같은 맥락의 함수로 isalpha()가 있다. 이건 알파벳인지 확인해주는 함수.
사용법은 isdigit과 같으니 별도로 적지 않겠다.
tolower() / toupper()
하.. 이것도 함수인지 메서드인지 헷갈린다.. 함수라는 것 명심~!!!
to_lower 아니고 붙혀서 쓰는것도 명심..!! 언더바 없다구 ㅠㅠㅠ
이 친구도 ctype.h 에서 온 애라 char형만 가능하다.
string 에다가 적용하고 싶을 경우 이렇게 쓴다.
string data = "HELLO";
transform(data.begin(), data.end(), data.begin(), tolower);
cout << data; // "hello"
'알고리즘' 카테고리의 다른 글
[알고리즘] 구조체 정렬 / C++ (0) | 2023.01.02 |
---|---|
[알고리즘] 소수구하기 - 에라토스테네스의 체 / C++ (0) | 2022.05.10 |
[알고리즘] Dynamic Programming (DB) (0) | 2022.04.13 |
[이것이 코딩테스트다] 시간제한 판단법 (0) | 2021.05.10 |
[알고리즘] 그리디 알고리즘의 개념과 거스름돈 문제풀이의 한계점 (0) | 2021.05.10 |