Конвертация unsighed char в char*;

330
04 декабря 2017, 17:38

Надо представить десятичное число в unsigned char и реализовать операции сложения. вычитания, умножения и деления.

Число вроде бы представил, но с операциями проблема. Выдает ошибку error C2664: 'int atoi(const char *)': cannot convert argument 1 from 'unsigned char [100]' to 'const char *' в строчках

    a = atoi(obj1.dec) + atoi(obj2.dec);
    b = atoi(obj1.dec) - atoi(obj2.dec);
    c = atoi(obj1.dec) * atoi(obj2.dec);
    d = atoi(obj1.dec) / atoi(obj2.dec);

Насколько я понял это из-за того, что у меня объекты класс типа char* а само число unsigned char. Как избавиться это этой ошибки?

#include <iostream>
#include <string>
using namespace std;
class oper;
class decimal
{
    unsigned char dec[100];
    size_t size;
    friend oper;
public:
    decimal(char*);
};
decimal::decimal(char* get)
{
    size = strlen(get);
    for (int i = size - 1; i >= 0; i--, get++)
    {
        dec[i] = *get;// или просто dec[i] = *get;
        cout << dec[i];
    }
    cout << endl;
}
class oper
{
    unsigned char *slozh;
    unsigned char *vich;
    unsigned char *del;
    unsigned char *umn;
public:
    oper(decimal, decimal);
};
oper::oper(decimal obj1, decimal obj2)
{
    char* sl;
    char* vi;
    char* de;
    char* um;
    int a, b, c, d;
    a = atoi(obj1.dec) + atoi(obj2.dec);
    b = atoi(obj1.dec) - atoi(obj2.dec);
    c = atoi(obj1.dec) * atoi(obj2.dec);
    d = atoi(obj1.dec) / atoi(obj2.dec);
    sl = itoa(a);
    vi = itoa(b);
    de = itoa(c);
    um = itoa(d);

}
int main()
{
    //cout << "Vvedite 2 chisla: " << endl;
    //char* a;
    //char* b;
    //a = b = NULL;
    //cin >> a >> b;
    //decimal d1(a);
    //decimal d2(b);
    decimal a = "123321";
    decimal b = "123456";
    oper o(a, b);
    system("pause");
    return 0;
}

само задание:

Answer 1

Можно просто пойти по пути приведения:

a = atoi((char*)obj1.dec) + atoi((char*)obj2.dec);
b = atoi((char*)obj1.dec) - atoi((char*)obj2.dec);
c = atoi((char*)obj1.dec) * atoi((char*)obj2.dec);
d = atoi((char*)obj1.dec) / atoi((char*)obj2.dec);

Но!
Зачем вам вообще unsigned char dec[100];? Почему он должен быть unsigned? Лично я не вижу ни одной для этого причины, зато сразу несколько - для char dec[100];. Вам не нужно будет выполнять приведение типов, в dec[i] = *get; будет однотипное присваивание (кстати, а завершить строку нулевым символом вы не хотите?). Так что подумайте о том, чтоб просто убрать unsigned...

Да, и itoa у вас вызывается не так, как нужно. Но это уже второй вопрос :) - как и функционирование программы (я его не смотрел).

READ ALSO
Подсчет ветвей до заданной вершины С++

Подсчет ветвей до заданной вершины С++

Я написал функцию подсчета ветвей - branches(TNode*&, int)Работает почти исправно, но если ввести несуществующую вершину, то выдает просто значение...

243
Вывод в файл .c++

Вывод в файл .c++

Как вывести в файл значения целочисленных переменных x,y,z (здесь z - количество часов, y - количество минут, x - количество секунд) в формате hh:mm:ss...

367
Заголовочные файлы / библиотека / STL

Заголовочные файлы / библиотека / STL

Я правильно понимаю, что: Библиотека - это набор функций ? Заголовочный файл - это набор прототипов нужных функций из библиотеки ? Стандартная...

277
оператор new возвращает указатель на 0 байт

оператор new возвращает указатель на 0 байт

Для чего может понадобиться такая конструкция и почему при запросе 0 байт возвращается указатель

222