#include <iostream>
using namespace std;
void generCad(int n, char* cad){
int longi = 1, lastchar, m = n; // calculating lenght of binary string
char actual;
do{
longi++;
n /= 2;
}while(n/2 != 0);
cad = new char[longi];
lastchar = longi - 1;
do{
actual = m % 2;
cad[lastchar] = actual;
m /= 2;
lastchar--;
}while(m/2 != 0);
cout << "Cadena = " << cad;
}
嗨!我在这里遇到问题,因为我需要一个为数字n创建二进制字符串的函数。我认为这个过程“很好”但是cout没有打印任何东西,我不知道如何使用new运算符填充我创建的字符串
答案 0 :(得分:1)
代码应如下所示:
void generCad(int n, char** cad)
{
int m = n, c = 1;
while (m >>= 1) // this divides the m by 2, but by shifting which is faster
c++; // here you counts the bits
*cad = new char[c + 1];
(*cad)[c] = 0; // here you end the string by 0 character
while (n)
{
(*cad)[--c] = n % 2 + '0';
n /= 2;
}
cout << "Cadena = " << *cad;
}
请注意,cad现在是char **而不是char *。如果它只是char *那么你没有像你期望的那样得到函数外的指针。如果你不需要这个函数之外的字符串,那么它可以作为char *传递,但是在离开函数之前不要忘记删除cad(好习惯; - ))
编辑:
这段代码可能更具可读性并且也是如此:
char * toBin(int n)
{
int m = n, c = 1;
while (m >>= 1) // this divides the m by 2, but by shifting which is faster
c++; // here you counts the bits
char *cad = new char[c + 1];
cad[c] = 0; // here you end the string by 0 character
while (n)
{
cad[--c] = n % 2 + '0';
n /= 2;
}
cout << "Cadena = " << cad;
return cad;
}
int main()
{
char *buff;
buff = toBin(16);
delete [] buff;
return 1;
}
答案 1 :(得分:0)
actual
包含数字 0
和1
,而非字符 '0'
和{{1} }。要转换,请使用:
'1'
此外,由于您使用cad[lastchar] = actual + '0';
作为C字符串,因此需要分配额外的字符并添加NUL终止符。
答案 2 :(得分:0)
actual = m % 2;
应该是:
actual = m % 2 + '0';