【问题标题】:How can i move the first element in an array and move it to the last in c programming?如何在 c 编程中移动数组中的第一个元素并将其移动到最后一个元素?
【发布时间】:2014-08-01 18:51:54
【问题描述】:

如果我有一个数组,比如说 [1,2,3,4,5,6],我怎样才能使它成为 [2,3,4,5,6,1]?我应该使用哪个循环?我尝试使用 for 循环,但是由于我对 C 编程相当陌生,因此无法生成输出。

【问题讨论】:

    标签: c arrays for-loop


    【解决方案1】:
    int array[6] = { 1, 2, 3, 4, 5, 6 };
    int array_size = 6;
    
    // array is now { 1, 2, 3, 4, 5, 6 }
    
    int array = array[0];                        // #1
    
    for(int i = 1; i < array_size; i++) {        // #2
       array[i - 1] = array[i];
    }
    
    array[array_size - 1] = tmp;                 // #3
    
    // array is now { 2, 3, 4, 5, 6, 1 }
    

    它是这样工作的:

    1. 获取第一个值并将其存储在一个特殊变量tmp中。
    2. 取每个剩余的值,然后将一步移到数组的前面。
    3. 获取存储在tmp 中的值并将其移到数组的后面。

    【讨论】:

    • @Sifu 我没有看到我的答案有问题?我不认为这个问题直接表明这一定是任何类型的作业,因此我尽量回答清楚。
    • 我给你点赞是因为它有效,我也不知道你为什么不点赞。
    【解决方案2】:

    哎呀。我第一次看错了问题

    int len = 5;
    char *pOriginal = {0,1,2,3,4}
    char ch0 = pOrigina[0];
    memmove(pOriginal, &pOrigina[1], len-2) // Thanks guys!
    pOriginal[len-1] = ch0;
    

    【讨论】:

    • 这行不通。这个问题很清楚"how do I rotate the array by moving the first element to the end?"你的回答只是交换了第一个和最后一个元素,这是不一样的。
    • 将重叠的内存区域传递给memcpy 会导致未定义的行为。 (hint 如何解决这个问题)。
    • @SingleStepper:对你来说它还没有失败并不重要。语言标准说它是未定义的行为,因此依赖它是一种不好的做法。如果区域重叠只需使用memmove()
    • @SingleStepper 引用memcpy() 的联机帮助页:“memcpy() 函数将n 字节从内存区域src 复制到内存区域dest。内存区域不能重叠。如果内存区域确实重叠,请使用 memmove()。"
    • 好的!好的!我会改变我的答案!
    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2016-09-27
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多