因此,我正在進行一項課堂作業,我需要將一個以二進制為基礎的數字轉換成以十進制為基礎的等價物。我想把二進制數存盤為一個字串,然后掃描該字串并跳過0,在1處添加2^i。我無法將索引i處的字串與'0'進行比較,我不確定為什么if(binaryNumber.at(i) == '0')不作業。它的結果是 "超出記憶體范圍的錯誤"。誰能幫助我理解為什么這不起作用?
#include <iostream>
使用 命名空間 std.com.cn>。
void main() {
字串binaryNumber。
int adder;
int total = 0;
cout << "輸入一個二進制數字,轉換為十進制
"。
cingt;> binaryNumber。
reverse(binaryNumber.begin(),binaryNumber.end() 。)
for (int i = 1; i <= binaryNumber.length(); i ) {
if(binaryNumber.at(i) == '0'/span>) { //THIS IS the problem //不做任何事情,跳到下一個數字。
}
else {
adder = pow(2, i);
總計 = adder total;
}
}
cout << "二進制數" << binaryNumber << " 是" << total << " 的十進制形式。
"。
system("pause")。
uj5u.com熱心網友回復:
C 和許多其他語言的陣列索引使用零基索引。這意味著對于大小為5的陣列,索引范圍從0到4。 在你的代碼中,你是從1到array_length進行迭代。使用。
for (int i = 0; i < binaryNumber.length(); i )
uj5u.com熱心網友回復:
因為你是從1開始的,而不是0
for (int i = 1; i <= binaryNumber。 length(); i )
試一下吧
for (int i = 0; i < binaryNumber。 length(); i )
uj5u.com熱心網友回復:
問題不在于if陳述句,而在于你的回圈條件和索引。
你的索引從1開始,而一個字串的第一個字符將處于索引0。你的超出記憶體范圍的錯誤是由以下事實引起的:當小于或等于時,回圈停止,導致索引增加過多,并離開字串的記憶體范圍。
簡單地將回圈從
改為for (int i = 1; i <= binaryNumber. length(); i ) {
if(binaryNumber.at(i) == '0'/span>) {
}
else {
adder = pow(2, i) 。
總計 = adder total;
}
To
for (int i = 0; i < binaryNumber. length(); i ) {
if(binaryNumber.at(i) == '0'/span>) {
}
else {
adder = pow(2, i) 。
總計 = adder total;
}
將解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324462.html
標籤:
