알고리즘 연습/백준
[C++][BOJ/알파벳찾기/10809] string의 substring 찾기 find 함수, string :: npos
_h.j
2021. 2. 15. 23:27
728x90
백준 10809 바로가기
문자열을 입력받고 각 문자에 각 알파벳에 대해 문자열에서 처음 나오는 위치를 출력하는 문제다.
위치 찾는 방법을 find 활용해서 풀어보자.
소스코드1
#include <bits/stdc++.h>
using namespace std;
int main(){
string w;
cin>>w;
// 기본 풀이
int a[26];
memset(a,-1,sizeof(a));
for(int i = -1; w[++i] ;)
if(a[w[i]-'a'] < 0)
a[w[i]-'a'] = i;
for(auto e : a) cout<<e<<" ";
}
소스코드2
#include <bits/stdc++.h>
using namespace std;
int main(){
string w;
cin>>w;
// find 활용해서 바로 가능
for(char c = 'a'; c<='z';c++) cout<<int(w.find(c))<<" ";
return 0;
}
▶ str.find(...)
원형
size_t find (const string& str, size_t index = 0) const;
설명
string에서 특정 substring을 찾는다. 매개 변수로 들어온 문자열과 내 문자열 중 일치하는 것이 있는 지 확인
5개 오버로딩 되어있다.
원형에서 index는 어느 위치에서 부터 찾을지
리턴값
일치하는 문자열이 있다면 문자열의 첫 번째 위치 반환 (0 부터 시작)
없는 경우 string::npos 반환 ( -1 반환이 아님 주의 , constant로 선언된 경우 -1로 리턴된다하고.. 아무튼 사용시 주의 )
가장 자주 쓰이는 형태
s.find("substring");
일치 문자열 없는 경우 사용법
if( s.find("substr") == string::npos ){
cout<< -1 <<endl;
}
이렇게 쓰는 것이 더 안전. 백준 문제에선 어찌 어찌 통과되었지만 주의하자...
참고
728x90