我不知道为什么我的字符串无法保存值

我正在编写一个C ++函数来从十二月计算Hex,但我不知道为什么我的字符串无法保存该值。 有谁能够帮助我?

string DecToHex(int a){
  int i=0,j=0;
  string d,c;
  while(a!=0)
  {
    i=a%16;
    switch(i)
    {
      case 10:
        d[j]='A';
        break;
      case 11:
        d[j]='B';
        break;
      case 12:
        d[j]='C';
        break;
      case 13:
        d[j]='D';
        break;
      case 14:
        d[j]='E';
        break;
      case 15:
        d[j]='F';
        break;
      default:
        d[j]=48+i;
        break;
    }

    a=a/16;
    j++;
  }

  cout<<"D="<<d;
  return d;
}

更改

d[j]='A';

d+='A'

其余的都做同样的事情。


你实际上并没有为你的string分配任何内存,所以使用d[j]未定义的行为 。 您需要使用d += ...d.push_back(...)

但即使你修复了这个错误,你的代码仍然无法正常工作。 当它应该返回"0"时,对于a=0它根本不输出任何字符串值。 它以相反的顺序返回其他字符串。 例如, a=16返回"01"而不是"10"a=31返回"F1"而不是"1F"a=32返回"02"而不是"20"等。

而不是尝试更像这样的东西:

#include <string>

std::string DecToHex(int a)
{
    int i;
    std::string d;

    d.reserve(sizeof(a)*2);

    do
    {
        i = a % 16;
        if ((i >= 10) && (i <= 15))
          d.insert(0, 1, 'A'+(i-10));
        else
          d.insert(0, 1, '0'+i);
        a /= 16;
    }
    while (a != 0);

    return d;
}

要么:

#include <string>
#include <algorithm>

std::string DecToHex(int a)
{
    int i;
    std::string d;

    d.reserve(sizeof(a)*2);

    do
    {
        i = a % 16;
        if ((i >= 10) && (i <= 15))
          d += ('A'+(i-10));
        else
          d += ('0'+i);
        a /= 16;
    }
    while (a != 0);

    std::reverse(d.begin(), d.end());

    return d;
}

要么:

#include <string>
#include <sstream>
#include <algorithm>

std::string DecToHex(int a)
{
    int i;
    std::ostringstream oss;

    do
    {
        i = a % 16;
        if ((i >= 10) && (i <= 15))
          oss << ('A'+(i-10));
        else
          oss << ('0'+i);
        a /= 16;
    }
    while (a != 0);

    std::string d = oss.str();
    std::reverse(d.begin(), d.end());

    return d;
}

在任何情况下,你的函数根本不处理负数,这需要一些额外的工作(在计算十六进制之前切换到二进制补码表示)。 我将把它作为锻炼,让你解决问题。

链接地址: http://www.djcxy.com/p/86321.html

上一篇: I don’t know why my string can't save the value

下一篇: What is NoMethodError in rails?