2

我有一个很奇怪的问题。我正在做的是我试图在代码末尾将字符串中的 8 位二进制数转换为十进制数(字符串)二进制字符串,但不是十进制字符串...

这是我的代码:

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;


void bintodec(string bin);

int main()
{
    string bin="";
    bintodec(bin);
    return 0;
}

void bintodec(string bin)
{
    int temp;
    int temp_a;
    int temp_b;
    string dec;

    cout << "Enter the binary number: ";
    cin >> bin;

    temp = 128*(bin[0]-48) + 64*(bin[1]-48) + 32*(bin[2]-48) + 16*(bin[3]-48) + 8*(bin[4]-48) + 4*(bin[5]-48) + 2*(bin[6]-48) + (bin[7]-48);
    temp_a = temp%10;
    temp = (temp - temp_a) / 10;
    temp_b = temp%10;
    temp = (temp - temp_b) / 10;

    dec[2]=temp_a+48;
    dec[1]=temp_b+48;
    dec[0]=temp+48;
    dec[3]='\0';

    cout << endl << bin << " in decimal is: " << dec << endl;
}

这是运行结果:

输入二进制数:10101010

十进制的 10101010 是:

在“是”之后应该有我的十进制数;但是什么都没有。我试图单独计算 dec[0] dec[1] 和 dec[2] 并且它有效,但是当我计算整个 dec 时,我每次都失败了......

谁能告诉我我的问题在哪里?我认为我的代码有问题,但我可以弄清楚...

4

3 回答 3

4

的大小dec为零。但是您可以访问位置 0 到 3 的元素。例如,您可以dec通过使用创建初始化为适当大小的元素

string dec(4, ' '); // fill constructor, creates a string consisting of 4 spaces

代替

string dec;

.

于 2013-08-30T16:38:53.920 回答
1

std::string@SebastianK 已经解决了您的长度为零的事实。我想添加它而不是以下内容:

dec[2]=temp_a+48;
dec[1]=temp_b+48;
dec[0]=temp+48;
dec[3]='\0';

您可以使用成员函数将字符附加到空:std::stringpush_back()

dec.push_back(temp + '0');
dec.push_back(temp_b + '0');
dec.push_back(temp_a + '0');

请注意,您不需要 NULL 终止 astd::string并且我使用字符文字'0'而不是 ASCII 值 48 因为我认为它更清晰。

于 2013-08-30T17:01:21.913 回答
0

注意:这只是一个带有代码的注释,而不是实际答案。

int main()
{
    string bin="";
    decode(bin);
}

void decode(string bin)
{
}

这会导致在进入“decode”时创建一个新字符串,并将“bin”的内容复制到它。解码结束时,对 decode::bin 所做的任何更改对 main 都是不可见的。

您可以避免这种情况 - 称为“按值传递”,因为您传递的是“bin”而不是“bin”本身的值 - 通过使用“按引用传递”

void decode(string& bin)

但是在您的代码中,您实际上似乎根本不需要传递“bin”。如果您在解码后需要在 main 中使用“bin”,您可以考虑返回它:

int main()
{
    string bin = decode();
}

string decode()
{
    string bin = "";

    ...

    return bin;
}

但是现在,只需从 main 中删除 bin 并使其成为 decode 中的局部变量。

void bintodec();

int main()
{
    bintodec();
    return 0;
}

void bintodec()
{
            std::string bin = "";
    cout << "Enter the binary number: ";
    cin >> bin;

    int temp = 128*(bin[0]-48) + 64*(bin[1]-48) + 32*(bin[2]-48) + 16*(bin[3]-48) + 8*(bin[4]-48) + 4*(bin[5]-48) + 2*(bin[6]-48) + (bin[7]-48);
    int temp_a = temp%10;
    temp = (temp - temp_a) / 10;
    int temp_b = temp%10;
    temp = (temp - temp_b) / 10;

            char dec[4] = "";
    dec[2] = temp_a+48;
    dec[1] = temp_b+48;
    dec[0] = temp+48;
    dec[3] = '\0';

    cout << endl << bin << " in decimal is: " << dec << endl;
}
于 2013-08-30T16:55:01.360 回答