在字符串中移动字符

时间:2013-06-28 12:23:52

标签: c++ string char

我尝试使用以下移位功能来移动字符串中的字符:

// 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”。我使用了一个调试器,发现移位函数正确地移动了字符。问题是什么?非常感谢

0 个答案:

没有答案