Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- window
- install
- json
- Golang
- http
- write
- Linux
- Close
- 리뷰
- go
- tcp
- mutex
- FOR
- JavaScript
- windows
- 영화
- GO 언어
- channel
- 책
- Sync
- c++
- bitcoin
- go언어
- API
- package
- range
- Callback
- C
- File
- Python
Archives
- Today
- Total
Code Habit
std::string 문자열 찾기( find ) 본문
c++ 문자열에서 특정 문자열을 찾을 때 std::string의 find 함수를 사용한다. 보통 아래와 같이 많이 사용한다.
std::string text = "abcdefg";
size_t nPos = text.find("cde");
위 코드에서 nPos의 값은 찾고자 하는 문자열의 시작 위치가 된다. 즉 text.find("cde")는 2를 반환하게 된다.
이렇게 쉽고 편리하게 원하는 문자열을 찾을 수 있는데 하나 주의할 점이 있다.
찾고자 하는 문자열이 없을 때다 보통 찾고자 하는 문자열이 없을때 -1이 반환된다고 생각하는데 여기서는 그렇지 않다.
-1이 아닌 매우 큰 수의 쓰레기 값이 반환된다. 그래서 만약 다음과 같이 쓰면 런타임 에러를 발생할 수 있다.
std::string text = "abcdefg";
size_t nPos = text.find("123");
std::string subtext = text.substr(nPos); // 런타임 에러 발생 !!
nPos의 값이 너무 커 text 변수의 범위를 벗어나는 out of range 런타임 에러가 발생하는 것이다.
이 때 이를 방지하고자 문자열이 있는지 검사할 수 있는 방법이 있는데 'string::npos'를 이용하는 것이다. c++에서 std::string.find() 함수에서 찾고자 하는 문자열이 없으면 'string::npos'를 반환하게 된다.
std::string text = "abcdefg";
size_t nPos = text.find("123");
if( nPos != string::npos ) { // 찾고자 하는 문자열이 있었는지 검사
std::string subtext = text.substr(nPos);
}