簡體   English   中英

如何在RPG中移動數組元素?

[英]How to shift array elements in RPG?

我知道 A 循環可用於將每個元素移動到其新目的地的事實,但是有沒有更簡單、更優雅的解決方案來解決這個問題? 顯然 MOVEA 在這里沒有太大幫助,因為它不能在同一個陣列上工作。

使用SUBARR功能向下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

由於重疊,上移需要使用臨時陣列或存儲。

memmove() — Copy Bytes C 庫函數可以安全地從左到右或從右到左復制重疊的內存區域。 我的一個用途是在掃描字符串以查找嵌入的撇號之后。 如果我找到一個,我就從那個位置開始取字符串並將字節向右移動(即“復制”)一個位置。 這會導致雙引號內嵌撇號,所有后續字節都移位一個位置。

該函數還返回一個指向新位置的指針,我使用它(加 1)作為起點來掃描字符串的其余部分以查找下一個嵌入的撇號。 我循環直到掃描沒有返回任何命中。 字符串本質上只是一個字節的“數組”,因此它與實際數組一樣有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM