我是一个很喜欢用 1-index 的人,我习惯把 std::string
的最前面加上一个字符来达到 1-index 的效果,但是这会导致一些问题。
考虑如下代码片段:
int m;
string s;
cin>>m>>s;
s += 'a';
for(int i = 1;i <= m-2;i++){
if(s[i]=='a' && s[i+1]=='b' && s[i+2]=='c'){
cout<<"Found \"abc\"!";
}
}
int m;
string s;
cin>>m>>s;
for(int i = 0;i < m-2;i++){
if(s[i]=='a' && s[i+1]=='b' && s[i+2]=='c'){
cout<<"Found \"abc\"!";
}
}
按我的理解,这两个代码片段应该是等价的,但是如果 s 中仅有一个 abc
,1-index 的版本就会找不到 abc
,而 0-index 的片段则没有任何问题。
有无 dalao 解释是怎么回事?