이번 장에서는 STL의 string을 이용해 특정 구분자로 나뉘어 있는 텍스트 한줄을 여러개의 단어들로 쪼개는 함수를 만들어 보도록 하겠습니다.
2 int n = text.length();
3 int start, stop;
4
5 start = text.find_first_not_of(separators);
6 while ((start >= 0) && (start < n)) {
7 stop = text.find_first_of(separators, start);
8 if ((stop < 0) || (stop > n))
9 stop = n;
10 words.push_back(text.substr(start, stop - start));
11 start = text.find_first_not_of(separators, stop+1);
12 }
13 }
이 함수는 text 문자열에서 separators와 매칭되는 구분자를 찾아 words 벡터에 저장합니다. 직접적인 리턴은 없지만 파라메터를 통해 리턴을 하는 구조입니다.
5 라인의 'find_first_not_of' 함수는 'separators'와 매칭되지 않는 가장 첫번째 위치를 찾습니다. 이 함수의 프로토 타입은 뒤에 어디서 부터 시작 할지 위치를 정해주는 파라메터가 하나 더 있는데 기본인자로 '0'이 지정되어 있어 아무것도 지정하지 않게 되면 처음부터 검색을 시작합니다.
그리고 루프를 돌면서 그 뒤에 나타나는 구분자에 속하는 문자열을 찾습니다. 바로 7라인의 'find_first_of'라는 함수가 하는 역할 입니다. 이 함수에서 리턴되는 것은 이름 그대로 'separators'와 매칭되는 문자열의 가장 처음 위치를 리턴하는 것이지요.
이렇게 문자열의 시작 부터 구분자의 앞 까지 위치를 알아 내었습니다. 이제 해야 할 일은 문자열의 시작 부터 구분자까지 끊어 내어 벡터에 저장하는 일이겠지요. 이것을 위해 10 라인의 'substr' 함수가 사용되었습니다. 이 함수에서 리턴 되는 값을 벡터에 저장하는 것 까지.. 이 과정을 문자열이 끝날 때 까지 반복하는 것입니다.
Ref.
stl reference : http://www.sgi.com/tech/stl/table_of_contents.html
code : http://oopsla.snu.ac.kr/~sjjung/stl/