我不知道为什么我的字符串无法保存值
我正在编写一个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