我尝试使用以下移位功能来移动字符串中的字符:
// shift all characters in [start,end) to the right by number_of_places
// if number_of_places is negative, then shift to the left
void shift(char* start, char* end, int number_of_places){
if (number_of_places > 0){
for(char* k = end-1; k>=start; --k){
*(k+number_of_places) = *k;
}
}
if (number_of_places < 0){
for(char* k = start; k < end; ++k){
*(k+number_of_places)=*k;
}
}
}
为了测试代码,我做了以下操作,将字符从'B'转移到'C'到右边2个位置。我还确保我保留了空格(大小+ 1用于确保空字符也被移位)
s1.reserve(1000);
s1 = "A B C";
// passing &s1[s1.size()+1] should allow '\0' to be shifted
shift(&s1[2],&s1[s1.size()+1],2);
cout << s1 << endl;
但令人惊讶的是,转移s1的结果是“A B B”。我使用了一个调试器,发现移位函数正确地移动了字符。问题是什么?非常感谢