ゲイル・ラークマン・マクダウェル著 『世界で闘うプログラミング力』第5版から、プログラミングの問題について質問があります。
問題は次のように述べています。文字列内のすべてのスペースを「%20」に置き換えるメソッドを記述します。文字列の末尾に追加の文字を保持するのに十分なスペースがあり、文字列の実際の長さが与えられていると想定します。私は本のコードを使用し、文字配列を使用してJavaでソリューションを実装しました(Java文字列は不変であるという事実を前提としています)。
public class Test {
public void replaceSpaces(char[] str, int length) {
int spaceCount = 0, newLength = 0, i = 0;
for(i = 0; i < length; i++) {
if (str[i] == ' ')
spaceCount++;
}
newLength = length + (spaceCount * 2);
str[newLength] = '\0';
for(i = length - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[newLength - 1] = '0';
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength = newLength - 3;
}
else {
str[newLength - 1] = str[i];
newLength = newLength - 1;
}
}
System.out.println(str);
}
public static void main(String[] args) {
Test tst = new Test();
char[] ch = {'t', 'h', 'e', ' ', 'd', 'o', 'g', ' ', ' ', ' ', ' ', ' ', ' '};
int length = 6;
tst.replaceSpaces(ch, length);
}
}
replaceSpaces()
呼び出しから得られる出力は次のとおりです。元の配列の最後の文字を切り取った%20do 。私はこれに頭を悩ませてきましたが、アルゴリズムがこれを行っている理由を誰かが私に説明できますか?