|
최진호 님이 쓰신 글 :
: 안녕하세요.!!
: 요즘에 스트링 처리를 하는데 어려운점이 있어서..이렇게 도움을 요청합니다..
:
: String word =" the problem is how to search the string matched in the word" ;
: String factor ="the";
:
: 위와 같은 조건이 주어졌을때 the(factor) 빈도수와 발견된 자리수를 저장하는 함수를 만들려고 합니다..
:
: word의 자리수가 길지 않으면..string pos() 함수와 Substing 함수를 적절히 써서 찾으면 되는데
:
: word 의 자리수가 길어지면(3메가 이상) 이면 속도 문제가 거리네요..
:
: C++ Standard Library 에서 find 함수는 속도가 빠르긴한데 C++ 표준에서 쓰는 String 하고 빌더에서 쓰는 AnsiString 하고 호환이 안되서 문제가 있고 또 개수를 다찾지는 못하더군요(이것은 왜 그런지?)
:
: UltraEditor 의 find 기능에서 찾는 속도 처럼 String 검색을 보다 빠르게 할수 있는 방법이 없는지
:
: 빌더도 아래 C++ find 함수 예제 처럼 찾는 범위를 임으로 정할수 있는 방법이 존재하는지 ? 아님 다른 방법이 있는지?
:
: string str1( "Alpha Beta Gamma Delta" );
: string::size_type loc = str1.find( "Omega", 0 ); <---
: if( loc != string::npos )
: cout << "Found Omega at " << loc << endl;
: else
: cout << "Didn't find Omega" << endl;
:
: 먼저 글을 읽어 주신것에 대해서 감사드립니다..
:
: 그럼 좋은 답변 기대 하겠습니다..
: 수고하세요
기본 타입이 char * 라는 가정하에..
String word(~~~);
String factor(~~~);
char *w_st = word.c_str();
char *w_ed = w_st + word.Length();
char *f_st = factor.c_str();
unsigned int fSize = factor.Length();
char *f_ed = f_st + fSize;
char *pos = w_st;
vector<unsigned int> PosVec;
while( true )
{
pos = search(pos, w_ed, f_st, f_ed);
if ( pos >= w_ed ) break;
PosVec.push_back( pos - w_st );
pos += fSize;
}
발견된 위치는 PosVec에 저장되어 있습니다.
빈도수는 PosVec.size() ^^
이정도면 되지 않을까 싶습니다만.. 지금 시간이 늦어서
테스트까지는 못해보겠네요. ^^;
|