有一個行為我不明白,c變數應該在每次陣列的一個元素不等于它旁邊的元素時增加1,但是有一個增量是自動完成的,它使c增加1。我認為這是因為陣列的最后一個元素被比作不等于它的東西。為什么會發生這種情況?如果我是對的,那么最后一個元素與什么東西進行比較呢?
#include <iostream>
int main() {
int n, c = 0;
std::cin >> n。
std::string s[n];
for (int i = 0; i < n; i ) {
std::cin >> s[i];
}
for (int i = 0; i < n; i ) {
if (s[i] != s[i 1] ) {
c ;
}
}
std::cout << c;
}
uj5u.com熱心網友回復:
std::string s[n];正在創建所謂的 "可變長度陣列",這不是標準C 的一部分,但被一些編譯器作為擴展支持。 請不要依賴這個。使用std::vector來代替動態長度陣列,它的長度在運行時才會知道。
但是,更重要的是,你的第二個回圈有未定義行為。 uj5u.com熱心網友回復: 從這里開始。https://www.cplusplus.com/reference/string/string/operator[]/ "如果pos等于字串的長度,該函式將回傳對字串中最后一個字符(不應修改)之后的空字符的參考。"
標籤: 上一篇:你如何優化高總阻塞時間vues[]/code>陣列元素的有效索引是0. n-1,所以在該回圈的最后一次迭代中,s[i]訪問了陣列中的最后一個字串,并且s[i 1]訪問了越界,所以s[i]被比較的值是不確定的(如果代碼沒有因為訪問無效的記憶體而直接崩潰)。
s[s.length() ] == '0'
