Форум программистов, компьютерный форум CyberForum.ru

char конвертация - C++

Восстановить пароль Регистрация
 
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
05.10.2013, 22:53     char конвертация #1
Здравствуйте, есть кусок кода какой в принципе понятен как он работает ну вот только не могу понять строку
C++
1
    sum=min[i]+max[i+max.length()-min.length()]+carry-2*'0';
именно -2*0; И на бумажке питалась понять, просто как можно сложить int + char, получается бред. Заодно спрошу (char)? Это перевод типа int в char так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
string operator+(string sum1, string sum2){
    string result ="";
    int carry=0;
    int sum=0;
    int i;
    string min=sum1;
    string max=sum2;
    if(sum1.length()>sum2.length()){
        max=sum1;
        min=sum2;}
    else {
        max=sum2;
        min=sum1;
    }
 
 
    for(i = min.length()-1; i>=0; i--){
 
        sum=min[i]+max[i+max.length()-min.length()]+carry-2*'0';
        carry=sum/10;
        sum%=10;
                result = (char)(sum + '0') + result;
    }
    i=max.length()-min.length()-1;
 
      while (i>=0){
        sum = max[i] + carry - '0';
        carry = sum/10;
        sum%=10;
 
        result = (char)(sum + '0') + result;
        i--;
    }
 
    if (carry!=0){
        result = (char)(carry + '0') + result;
    }       
 
    return result;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 22:53     char конвертация
Посмотрите здесь:

Конвертация int в char* C++
C++ Конвертация char * -> WideString
Конвертация числа в строку (int to char) C++
Конвертация из int в char C++
Конвертация ' string hex ' to char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
05.10.2013, 23:12     char конвертация #2
Думаю, если переписать эту строчку в следующем виде станет понятнее:
C++
1
sum = (min[i]-'0') + (max[i+max.length()-min.length()]-'0') + carry;
И int, и char - целочисленные типы, их можно складывать, умножать и т.п., причем аргумент типа char будет приведен к типу int. Результат тоже будет int.

И да, (char) - это явное приведение типов в C-стиле. К слову, в С++ его лучше не использовать.
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
05.10.2013, 23:28  [ТС]     char конвертация #3
Хорошо, тогда не понятно зачем отнимать ноль??
если к примеру есть две строки мы сложили одну со второй в виде столбика , в сarry поместили его в остаток.
просто я и без нуля эту строку тоже компилировала и получался откровенно говоря бред.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
05.10.2013, 23:40     char конвертация #4
А говорите, понимаете, как работает код...
Значение символа '0' равно 48, '1' - 49 и т.д. Такая уж таблица ASCII. Соответственно, чтобы получить значение цифры, представленной переменной char, надо из этого char'а вычесть '0'. Не 0, а '0'.
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
05.10.2013, 23:56  [ТС]     char конвертация #5
Faret, извините а можно еще чуть по подробней, да действительно открыла таблицу ASCII, и смотрю что значения char('0') - dec(48), то есть в десятичной это 48??? просто не могу понять зачем это делать внедрять этот '0'; если сложение построчно и так идет как int.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
06.10.2013, 00:12     char конвертация #6
Ну вот к примеру есть строка "12", т.е. она содержит 2 символа: '1', '2'. В десятичном виде: 49, 50.
И другая строка "15", она же '1', '5', она же 49, 53.

И мы хотим их сложить. Столбиком, как в школе. Для этого мы должны обратиться к каждой отдельной цифре. Но у нас не цифры, у нас символы (тип char), представляющие эти цифры. Поэтому мы берем не '2' (aka 50), а '2'-'0' = 50 - 48 = 2.

'2' + '5' - 2*'0'= 50 + 53 - 2*48 = 7

Иначе было бы 50 + 53 = 103 - не многовато ли для суммы 2-х десятичных цифр?

Обратное преобразование, из десятичной цифры в соответствующий символ - это прибавить '0'. Что и делается на 28, 32 и 37 строках программы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2013, 00:50     char конвертация
Еще ссылки по теме:

C++ Конвертация int в char
C++ Что означает такая запись char *smt=new char[1]?
Преобразование char в char* или разделить на две строки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
06.10.2013, 00:50  [ТС]     char конвертация #7
спасибо буду разбираться дальше
Yandex
Объявления
06.10.2013, 00:50     char конвертация
Ответ Создать тему
Опции темы

Текущее время: 16:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru