string . substr(id , Len) . 截取 【id , id+Len) 的字符串
从string before = 【id , id+len)
next = [ id+len , string.size)
如果next中包含before ,则 before满足 ,反之以id开头的字符串都不满足。
const int Max_N = 1008 ;
char str[Max_N] ;
set <string> ans ;
int Ans(){
string s = string(str) ;
string before , next ;
int start , len ;
int L = s.length() ;
ans.clear() ;
for(start = 0 ; start < L ; start++){
for(len = 1 ; len + len + start <= L ; len++){
before = s.substr(start , len) ;
next = s.substr(start+len , L-start-len) ;
if(next.find(before) != string::npos)
ans.insert(before) ;
else
break ;
}
}
return ans.size() ;
}
int main(){
while(scanf("%s" ,str) != EOF){
printf("%d\n" , Ans()) ;
}
return 0 ;
}
下面是MSDN中的说明
basic_string::npos
static const size_type npos = -1;
The constant is the largest representable value of type size_type. It is assuredly larger than max_size(); hence it serves as either a very large value or as a special code.
npos表示string的结束位置,是string::type_size 类型的,也就是find()返回的类型。
要想判断 find() 的结果是否为npos,最好的办法是直接比较: if (str.find("abc") ==string::npos) {... }
要想判断 find() 的结果是否为npos,最好的办法是直接比较: if (str.find("abc") ==string::npos) {... }
string::size_type (由字符串配置器allocator 定义) 描述的是 size,故需为无符号整数
要想判断 find() 的结果是否为npos,最好的办法是直接比较: if (str.find("abc") ==string::npos) {... }