заполнение строки, созданной new, в функции - PullRequest
0 голосов
/ 25 ноября 2011
#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 ничего не печатает, я не знаю, как заполнить созданную мной строку, используя новый оператор

Ответы [ 3 ]

1 голос
/ 25 ноября 2011

Код должен выглядеть так:

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 перед выходом из функции (хорошая привычка; -))

EDIT:

Этот код, вероятно, будет более читабельным и сделает то же самое:

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;

}
0 голосов
/ 25 ноября 2011
actual = m % 2;

должно быть:

actual = m % 2 + '0';
0 голосов
/ 25 ноября 2011

actual содержит цифры 0 и 1, а не символы '0' и '1'.Для преобразования используйте:

cad[lastchar] = actual + '0';

Кроме того, поскольку вы используете cad в качестве строки C, вам необходимо выделить дополнительный символ и добавить терминатор NUL.

...