将索引 i 处的字符串与 C++ 中的值进行比较
comparing a string at index i to a value in C++
所以我正在处理一个 class 作业,我需要将一个以 2 为底的二进制数转换为以 10 为底的等效二进制数。我想将二进制文件存储为一个字符串,然后扫描该字符串并跳过 0,并在 1 处添加 2^i。我无法将索引 i 处的字符串与 '0 进行比较,并且我不确定为什么 if(binaryNumber.at(i) == '0') 不起作用。它会导致“超出范围内存错误”。谁能帮我理解为什么这不起作用?
#include <iostream>
using namespace std;
void main() {
string binaryNumber;
int adder;
int total = 0;
cout << "Enter a binary number to convert to decimal \n";
cin >> binaryNumber;
reverse(binaryNumber.begin(),binaryNumber.end());
for (int i = 1; i <= binaryNumber.length(); i++) {
if(binaryNumber.at(i) == '0') { //THIS IS THE PROBLEM
//do nothing and skip to next number
}
else {
adder = pow(2, i);
total = adder + total;
}
}
cout << "The binary number " << binaryNumber << " is " << total << " in decimal form.\n";
system("pause");
}
C++ 和许多其他语言的数组索引使用从零开始的索引。这意味着对于大小为 5 的数组,索引范围从 0 到 4。在您的代码中,您从 1 迭代到 array_length。采用:
for (int i = 0; i < binaryNumber.length(); i++)
因为你是从 1 而不是 0 开始的
for (int i = 1; i <= binaryNumber.length(); i++)
尝试一下
for (int i = 0; i < binaryNumber.length(); i++)
问题不在于 if 语句,而在于循环条件和索引。
您的索引从 1 开始,而字符串的第一个字符将在索引 0 处。你的out memory range错误是由于循环在小于或等于时停止,导致索引增加了太多而离开了字符串的内存范围。
只需将循环从
更改为
for (int i = 1; i <= binaryNumber.length(); i++) {
if(binaryNumber.at(i) == '0') {
}
else {
adder = pow(2, i);
total = adder + total;
}
}
到
for (int i = 0; i < binaryNumber.length(); i++) {
if(binaryNumber.at(i) == '0') {
}
else {
adder = pow(2, i);
total = adder + total;
}
}
将解决问题。
所以我正在处理一个 class 作业,我需要将一个以 2 为底的二进制数转换为以 10 为底的等效二进制数。我想将二进制文件存储为一个字符串,然后扫描该字符串并跳过 0,并在 1 处添加 2^i。我无法将索引 i 处的字符串与 '0 进行比较,并且我不确定为什么 if(binaryNumber.at(i) == '0') 不起作用。它会导致“超出范围内存错误”。谁能帮我理解为什么这不起作用?
#include <iostream>
using namespace std;
void main() {
string binaryNumber;
int adder;
int total = 0;
cout << "Enter a binary number to convert to decimal \n";
cin >> binaryNumber;
reverse(binaryNumber.begin(),binaryNumber.end());
for (int i = 1; i <= binaryNumber.length(); i++) {
if(binaryNumber.at(i) == '0') { //THIS IS THE PROBLEM
//do nothing and skip to next number
}
else {
adder = pow(2, i);
total = adder + total;
}
}
cout << "The binary number " << binaryNumber << " is " << total << " in decimal form.\n";
system("pause");
}
C++ 和许多其他语言的数组索引使用从零开始的索引。这意味着对于大小为 5 的数组,索引范围从 0 到 4。在您的代码中,您从 1 迭代到 array_length。采用:
for (int i = 0; i < binaryNumber.length(); i++)
因为你是从 1 而不是 0 开始的
for (int i = 1; i <= binaryNumber.length(); i++)
尝试一下
for (int i = 0; i < binaryNumber.length(); i++)
问题不在于 if 语句,而在于循环条件和索引。
您的索引从 1 开始,而字符串的第一个字符将在索引 0 处。你的out memory range错误是由于循环在小于或等于时停止,导致索引增加了太多而离开了字符串的内存范围。
只需将循环从
更改为for (int i = 1; i <= binaryNumber.length(); i++) {
if(binaryNumber.at(i) == '0') {
}
else {
adder = pow(2, i);
total = adder + total;
}
}
到
for (int i = 0; i < binaryNumber.length(); i++) {
if(binaryNumber.at(i) == '0') {
}
else {
adder = pow(2, i);
total = adder + total;
}
}
将解决问题。