개 등신같이 항상 문자열 다룰 때마다 까먹어서 하나씩 추가하면서 정리해야겠다
STRING
- string to Int
int a = stoi(str);
int b = stoi("3");
- 특정 문자 기준으로 자르기 (string tokenizer)
//////////////////////////////////////////////////////////////////////
//1. 이 방법은 구분기준이 문장이 될수 없고 문자만 가능!
#include <sstream>
string result = "";
stringstream ss("Hi Hello!! My Name");
string token = "";
const char delimiter = '!';
while (getline(ss, token, delimiter))
{
cout << token << endl;
}
//////////////////////////////////////////////////////////////////////
//2.구분기준이 문장이 가능
string line = "Hi Hello ※※ My ※※ Name";
string delimiter = "※※";
int pos = 0;
//★ pos = line.find(delimiter)는 연산 순서 때문에 무조건 괄호로 감싸줘야한다! ★
while ( (pos = line.find(delimiter)) != string::npos)
{
cout<<line.substr(0, pos)<<endl;
line.erase(0, pos + delimiter.length());
}
//substr 처음 인덱스부터 끝 인덱스를 지정해주면 그만큼 문자열에서 가져온다.
//erase 지정 인덱스부터 지정 길이만큼 문자 삭제
- 문자가 숫자인지 아닌지 판별
#include <cctype>
//isdigit(char)의 반환 값이 0이면 문자이고 아니면 숫자임
//문자 하나하나씩 판별해가는방식
string str = "1233BVBBA";
for (int i = 0; i < str.length(); ++i)
{
if (isdigit(str[i]) == 0) cout << "문자임";
else cout << "숫자임";
}
- 문자열에서 문자열 검색하기 [ string::find( ) ]
더보기
int main()
{
string s, y;
getline(cin, s); getline(cin, y);
while (pos != string::npos)
{
pos = s.find(y, pos + y.size());
}
}
내가 가장 많이 쓰는 오버로딩 형식이다.
size_type find ( const string & str, size_type pos = 0 ) const;
호출된 문자열 객체의 pos번째 인덱스부터
str찾기 시작하며 찾은 첫 인덱스를 반환한다.
- 문자열의 일부구간을 반환하기 [ string::substr( ) ]
더보기
#include <string>
using namespace std;
int main()
{
string str = "ABCDEF";
str.substr(3); //"DEF"
str.substr(2, 2); //"CD"
str.substr(2, 99); //"CDEF"
str.substr(99, 2); // Error std::out_of_range
return 0;
}
string substr (size_t pos = 0, size_t len = npos) const;
문자열의 pos번째 문자부터 len 길이 만큼의 문자열을 리턴한다.
len이 npos라면 알아서 문자열의 끝까지 적용시켜주고
반면에 pos는 유효한 인덱스가 아니면 에러를 일으키기에 주의할 것
'C++ > 유용한 것들' 카테고리의 다른 글
숫자 구분자 (0) | 2022.07.27 |
---|---|
서식문자 (0) | 2022.06.06 |
Cout에서 소수점 자리 고정하기 (0) | 2022.06.04 |