我編寫了一個循環,用一個引用數組替換另一個字符串中的每個字符。在迭代時更改數組值雖然會導致奇怪的行爲
for(int i=0 ; i < encoded_message_len ; i++){
for(int j=0; j < 26 ; j++){
if(encoded_message_copy[i] == substitution_alphabet[j]){
printf("%c ->>>> %c @ index:%d \n",encoded_message_copy[i], original_alphabet[j], i);
encoded_message_copy[i] = original_alphabet[j];
}
}
}
然而,當我運行這段代碼,我得到一個奇怪的輸出:
J ->>>> C @ index:0
H ->>>> R @ index:1
Q ->>>> Y @ index:2
Y ->>>> Z @ index:2
S ->>>> P @ index:3
U ->>>> T @ index:4
T ->>>> V @ index:4
X ->>>> O @ index:6
F ->>>> L @ index:7
L ->>>> X @ index:7
X ->>>> O @ index:8
B ->>>> G @ index:9
G ->>>> W @ index:9
Q ->>>> Y @ index:10
Y ->>>> Z @ index:10
當我刪除此行:從環encoded_message_copy[i] = original_alphabet[j];
,我得到的預期輸出:
J ->>>> C @ index:0
H ->>>> R @ index:1
Q ->>>> Y @ index:2
S ->>>> P @ index:3
U ->>>> T @ index:4
X ->>>> O @ index:6
F ->>>> L @ index:7
X ->>>> O @ index:8
B ->>>> G @ index:9
Q ->>>> Y @ index:10
有人可以解釋爲什麼會發生這種情況嗎?
這裏缺少很多上下文。 –
當您找到替代字符時,您不會跳出內部循環。結果,有時更新的字符在* substitution_alphabet中也被找到並被替換。在你的'if'語句的主體結尾放置一個'break'語句。 –