以下のコードは、文字列内の連続する重複文字を 1 回だけ置換するために使用されます。
e.g. "AAAABBBB" -> "AB"
for ループを終了して値を temp に出力すると、文字列の単語の最後の文字を取得することが期待されます。ただし、文字列の最初の文字を取得します (つまり、temp を初期化した値で)。
string processString(string word) {
char temp = word[0];
string result = "";
int size = word.size();
for(int i=0, temp=word[0]; i<size; i++) {
if(word[i] == temp) {
continue;
} else {
result += temp;
temp = word[i];
}
}
cout << "TEMP : " << temp << endl;
return result + temp;
}
結果:
WORD: CJXEJACCAJEXJF
TEMP: C
Output of function: CJXEJACAJEXJC
しかし、for ループで再初期化を削除すると、上記のコードは完全に正常に動作します。
string processString(string word) {
char temp = word[0];
string result = "";
int size = word.size();
for(int i=0; i<size; i++) {
if(word[i] == temp) {
continue;
} else {
result += temp;
temp = word[i];
}
}
cout << "TEMP : " << temp << endl;
return result + temp;
}
結果:
WORD: CJXEJACCAJEXJF
TEMP: F
Output of function: CJXEJACAJEXJF
なぜこれが起こっているのか手がかりはありますか?FOR ループで再初期化すると、なぜそれほど大きな違いが生じるのでしょうか?