2

我知道 A 循环可用于将每个元素移动到其新目的地,但有没有更简单、更优雅的解决方案来解决这个问题?显然 MOVEA 在这里没有太大帮助,因为它不适用于同一个阵列。

4

2 回答 2

2

使用该SUBARR功能向下移动。

 /FREE
    %subarr(array:1) = %subarr(array:2); // Shift elements
    array(%elem(array)) = *blanks;       // Reset the remaining element
 /END-FREE

C                   EVAL      %SUBARR(array:1) = %SUBARR(array:2)
C                   EVAL      array(%ELEM(array)) = *BLANKS

由于重叠,向上移动需要使用临时数组或存储。

于 2012-09-19T04:34:34.670 回答
0

memmove() — 复制字节C 库函数可以安全地从左到右或从右到左复制重叠的内存区域。我的一个用途是在扫描字符串以查找嵌入的撇号之后。如果我找到一个,我会从该位置开始获取字符串并将字节向右移动(即“复制”)一个位置。这导致嵌入的撇号加倍,所有后续字节都移动了一个位置。

该函数还返回一个指向新位置的指针,我使用它(加 1)作为起点来扫描字符串的其余部分以查找下一个嵌入的撇号。我循环直到扫描没有返回任何命中。字符串本质上只是一个字节“数组”,因此它与实际数组一样有效。

于 2014-04-06T13:34:54.097 回答