0
#include <stdio.h>

void sliceShiftLeft(int array[], int start, int end) {
    if ( start < end ) {
        int temp = array[end];

        for ( int i = start + 1; i < end; i++ ) {
            array[i] = array[i+1];
        }
    array[start] = temp;
    }

}

int main() {
    int start = 2;
    int end = 5;

    int size = 10;
    int array[size];

    for ( int i = 0; i < size; i++ ) {
        array[i] = i;
    }

    for ( int i = 0; i < size; i++ ) {
        printf("%d ", array[i]);
    }

    printf("\n");

    printf("-------------------------\n");

    sliceShiftLeft(array, start, end);

    for ( int i = 0; i < size; i++ ) {
        printf("%d ", array[i]);
    }

    printf("\n");

    return 0;
}

问题是 sliceShiftLeft() 函数中的循环。

我需要将 01 2345 6789 转换为 01 5234 6789,但我不断收到 01 5455 6789。

我的步骤:

1)我将 slice 中的最后一个数字放入 temp 2)我运行循环,将 i+1 放入 i 3)我将 temp 中的最后一个数字放在第一位。

我的错在哪里?

4

2 回答 2

2

如果所需的输出是您在问题中提到的输出,那么您走错路了,您应该:

  • 将最后一个元素存储在 temp
  • 将所有元素从开始移动到结束 - 1 向右
  • 将最后一个元素存储到开始

当你走完全相反的路时,除了第三步。会发生什么:

0123456789
0134556789 <- array[i] = array[i+1]
0154556789 <- array[start] = temp
于 2013-09-08T18:03:13.073 回答
0

你的第一个错误出现在你for(int i ... )的第一部分,for你不能声明一个变量,而是初始化一个

于 2013-09-08T18:05:47.520 回答