1

我正在制作一个程序,该程序通过代表字符串“APPLE”的每个字符的相应 ASCII 数字将用户输入的字符串(例如“APPLE”)转换为二进制数。例如 ascii 中的 A = 65 等。我创建了一个将字符串转换为二进制文件的函数,但它似乎不起作用。它在无限循环中显示“等效二进制数是:0031F240for A”,并给我“0031F240for”而不是二进制版本 65。我知道这个函数适用于将十进制数转换为二进制,因为我已经尝试过了,但我认为我的 bin[] 数组的实现搞砸了。任何帮助,将不胜感激。

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <fstream>
using namespace std;

class RandomString
{
    private:
        string input;
        string bin[100];

    public:

RandomString() : bin(), input("")
{

}

void getData()
{
    cout << "Enter the word to be encoded into a binary file.";
    cin >> input;
}

void numToBin()
{
    int i = 0;
    int len = input.length();
    int num = int(input[i]);
    for(int i = 0; i < len; i++)
    {

        while(num != 0)
        {
            if (num % 2 == 0)
                bin[i].insert(0, "0");
            else
                bin[i].insert(0, "1");

            num = num / 2;
            cout << "The equivalent binary number is: " << bin << "for " << input[i] << endl;
        }
    }
}
void display()
{
}


};
4

3 回答 3

1

我没有测试结果是否正确,但是这段代码将字符串转换为二进制。可能您必须修改它以适应 ASCII 代码。

void DecimalToBinary(char a,std::vector<char>& v)
{
  if(a==0)
      v.push_back(0);
  if(a==1)
      v.push_back(1);
  else
    {
      v.push_back(a%2);
      DecimalToBinary(a/2,v);
    }
}



int main()
{
  std::vector<char> v;
  std::string line;
  getline(std::cin,line);
  std::istringstream input(line);
  char c;
  while(input >> c)
    {
  DecimalToBinary(c,v);
    }

  std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout,""));  
}

首先你的while循环永远不会停止,因为你没有改变iwhile循环内的值,所以int(input[i])总是相同的值,你必须在break某处使用 or i++,但我不知道结果是否正确,我认为递归是比在这种情况下更好,但无论如何尝试以下方法:

   void numToBin()
{
    int i = 0;
    int len = input.length();
    int num = int(input[i]);
    for(int i = 0; i < len; i++)
    {

        while(int(input[i]) != 0)
        {
            if (num % 2 == 0)
          {
                bin[i].insert(0, "0");
        break;
          }
            else
            {
                bin[i].insert(0, "1");
                num = num / 2;
            }
            cout << "The equivalent binary number is: " << bin << "for " << input[i] << endl;
        }
    }
}

其次,std::cout << bin你打印的是内存地址,而不是bin的内容。

于 2013-05-27T07:49:59.890 回答
0
while(int(input[i]) != 0)
        {
            if (num % 2 == 0)
                bin[i].insert(0, "0");
            else
            {
                bin[i].insert(0, "1");

            }
            num = num / 2;// this line should be in both case.
            cout << "The equivalent binary number is: " << bin << "for " << input[i] << endl;
        }

我已经改变num = num / 2了这两种情况。请检查一下。

于 2013-05-27T07:40:40.497 回答
0

你可能想改变'bin'

cout << "等效的二进制数为:" << bin

到'bin [i]'。

因为 'bin' 是一个字符串数组,也是字符串数组的指针/地址,所以 'cout << bin' 将始终输出地址。

于 2013-05-27T08:24:09.100 回答