/**************************************************************************** Возвращается строка, состоящая из символов строки-аргумента s, начина с первого (индекс 0) и длиной nch. Если длина исходной строки недостаточна, то результат будет содержать соответственно меньшее количество символов. *****************************************************************************/ const UCString lem::left( const UCString &s, int NCH ) { LEM_CHECKIT_Z(NCH>=0); const int l=s.length(); if( l==NCH ) { return s; } else if( NCH<=0 ) { return UCString(); } else { UCString res; const int nch = NCH>l ? l : NCH; for( int i=0; i<nch; i++ ) res.set_dir( i, s[i] ); res.set_dir( nch, '\0' ); res.calc_hash(); return res; } }
const UCString lem::to_unicode( const lem::CString &src, const CodeConverter *cp ) { UCString res; lem_ascii_to_unicode( res.ptr(), src.c_str(), cp ? cp : &lem::UI::get_UI().GetSessionCp() ); res.ptr()[src.length()] = 0; res.calc_hash(); return res; }
bool SG_Stemmer::Stem( const UCString &org, UCString &stem ) const { if( hStemmer==NULL || org.length()<3 ) return false; stem = org; if( sol_Stem( hStemmer, (wchar_t*)stem.c_str() )==0 ) { stem.calc_hash(); return true; } return false; }
/***************************************************************************** Возвращается строка, состоящая из последних nch символов строки-аргумента s. Если длина исходной строки недостаточна, то результат будет содержать соответственно меньшее количество символов. ******************************************************************************/ const UCString lem::right( const UCString &s, int NCH ) { LEM_CHECKIT_Z(NCH>=0); UCString res; if( NCH<=0 ) return res; const int l=s.length(); const int nch = NCH>l ? l : NCH; int i0=l-nch; for( int i=0; i<nch; i++ ) res.set_dir( i, s[i+i0] ); res.set_dir( nch, '\0' ); res.calc_hash(); return res; }