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