Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/106: Рейтинг темы: голосов - 106, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 4
1

Как сложить два char?

24.03.2012, 17:16. Просмотров 21311. Ответов 106
Метки нет (Все метки)


Как сложить два char?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2012, 17:16
Ответы с готовыми решениями:

Сложить столбиком два числа char
как сложить столбиком 2 числа записанных в char? Объясните кодом

Сложить два массива типа unsigned char
Необходимо создать метод класса для сложения двух массивов типа unsigned char. Числа в нем хранятся...

Как сложить два числа
как сложить два числа в с++

Как сложить два массива
Как сложить два массива и присвоит ответь третьему массиву int m={5,6,7}; int n={2,3,8}; in p;

106
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
24.03.2012, 17:17 2
char c1, c2, c;
c = c1 + c2;
4
Эксперт C
25440 / 15834 / 3386
Регистрация: 24.12.2010
Сообщений: 34,637
24.03.2012, 18:16 3
C
1
2
char s[100] = "abcd", *s2 = "efg";
strcat(s, s2);
Добавлено через 53 секунды
slice, юмор понял
0
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
18.06.2017, 21:44 4
Цитата Сообщение от Kalisto Посмотреть сообщение
Как сложить два 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
void sum(char*& c, char*& a, char*& b)
{
    size_t i, la, lb;
    la = strlen(a);
    lb = strlen(b);
    c = new char[la + lb + 1];
    for (i = 0; i < la + lb; i++)
    {
        if (i < la)
        {
            c[i] = a[i];
            if (i < lb) c[la + i] = b[i];
        }
        else if (i >= la * 2) c[i] = b[i - la];
    }
    c[i] = 0;
}
int main()
{
    char* a, b, c;
           ...
    sum(c, a, b);
           ...
    delete[] c;
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
18.06.2017, 22:10 5
bugaboo, извините, а это случайно ли не длинная арифметика?
0
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
18.06.2017, 22:28 6
Goffrua, результат до 18 446 744 073 709 551 615 символов осилит, дальше не отвечу )))
но с фиксированными размерами проблем как бы нет
0
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
18.06.2017, 23:29 7
Цитата Сообщение от bugaboo Посмотреть сообщение
C++
1
char* a, b, c;
Это Вы объявляете все три массива динамическими, или только первый?
Цитата Сообщение от bugaboo Посмотреть сообщение
C++
1
size_t i, la, lb;
А что такое size_t?
Цитата Сообщение от bugaboo Посмотреть сообщение
C++
1
void sum(char*& c, char*& a, char*& b)
Если передавать массив в функцию, обязательно писать &?
0
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
19.06.2017, 00:33 8
Цитата Сообщение от Goffrua Посмотреть сообщение
Это Вы объявляете все три массива динамическими, или только первый?
это просто объявление указателей. На тот момент они как бы ещё не до конца решили, на что указывают. Массивы a и b могут быть как статическими, так и динамическими, но должны быть инициализированы до вызова функции. Массив с как бы становится динамическим внутри функции и в этом суть - не надо заранее создавать массив фиксиованного размера и надеяться, что в него влезет, либо занимать 100 ячеек памяти для хранения 10 символов. Массив c, наоборот, не должен быть инициализирован до вызова функции. И его потом надо не забыть удалить.
Цитата Сообщение от Goffrua Посмотреть сообщение
А что такое size_t?
http://ru.cppreference.com/w/cpp/types/size_t
на самом деле там можно было написать int i, la, lb и для 99.9999% ситуаций этого было бы достаточно. Просто понт перестраховка
Цитата Сообщение от Goffrua Посмотреть сообщение
Если передавать массив в функцию, обязательно писать &?
Обязательно только для c. Для a и b - нет, но я написал, чтобы чуть порезче работало, поскольку при таком раскладе не создаются копии аргументов.
Я вообще то не профи, просто не нашел лучшего способа склеить массивы charов без этого велосипеда и подключения библиотек. И решил его выложить на суд общественности...
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
19.06.2017, 01:21 9
C++
1
'a' + 'b'
Если вы, вдруг, имеете ввиду конкатенацию, то используйте std::string
0
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
19.06.2017, 01:43 10
Цитата Сообщение от DevAlone Посмотреть сообщение
C++
1
'a' + 'b'
Если вы, вдруг, имеете ввиду конкатенацию, то используйте std::string
А если я хочу конкатенацию, но не хочу string?
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
19.06.2017, 04:03 11
Цитата Сообщение от bugaboo Посмотреть сообщение
А если я хочу конкатенацию, но не хочу string?
Тогда сам следи за выделением и освобождением памяти, ну или на стеке создавай
0
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
19.06.2017, 08:44 12
Цитата Сообщение от DevAlone Посмотреть сообщение
Тогда сам следи за выделением и освобождением памяти, ну или на стеке создавай
А я разве не слежу?
0
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
19.06.2017, 10:41 13
bugaboo, извините пожалуйста, а Вы не могли бы скинуть весь код с объявлением массивов, их вводом, вызовом функции и выводом с?
0
с++
1253 / 498 / 220
Регистрация: 15.07.2015
Сообщений: 2,509
19.06.2017, 10:52 14
Цитата Сообщение от Goffrua Посмотреть сообщение
и выводом с
такое не подойдет ?
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
#include <stdio.h>
 
void my_strcat (char *s, char *s_);
 
int main(void) 
{
char str [255]="";
char s1 [] = "Hello";
char s2 [] = ", world";
char s3 [] = "!";
char s4 [] = "(c)";
 
my_strcat(str,s1);
my_strcat(str,s2);
my_strcat(str,s3);
my_strcat(str,s4);
 
printf(str);
 
    return 0;
}
 
void my_strcat (char *s, char *s_)
{
while(*s) 
s++;
 
while(*s_)
{
    *s = *s_;
    s++;
    s_++;
}
}
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
19.06.2017, 11:20 15
Antikl, спасибо, но мне нужна именно длинная арифметика)
0
с++
1253 / 498 / 220
Регистрация: 15.07.2015
Сообщений: 2,509
19.06.2017, 11:28 16
Цитата Сообщение от Goffrua Посмотреть сообщение
длинная арифметика
может быть это ?
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
 
#define MAX_NUMBER_LEN 126
 
void input_big_number(char *number);
 
void output_big_number(char *number);
 
void add_big_numbers(char* sum, const char *a, const char* b);
 
int main()
{
    char a[MAX_NUMBER_LEN];
    char b[MAX_NUMBER_LEN];
    char c[MAX_NUMBER_LEN];
 
    memset(a, 0, MAX_NUMBER_LEN);
    memset(b, 0, MAX_NUMBER_LEN);
    memset(c, 0, MAX_NUMBER_LEN);
 
    input_big_number(a);
    input_big_number(b);
 
    add_big_numbers(c, a, b);
 
    output_big_number(c);
 
    printf("\n");
    getch();
    return 0;
}
 
void input_big_number(char *number)
{
    char buffer[MAX_NUMBER_LEN];
    char i, j, k;
 
    fgets(buffer, MAX_NUMBER_LEN, stdin);
 
    if (buffer[strlen(buffer) - 1] != '\n') {
        exit(EXIT_FAILURE);
    }
 
    buffer[strlen(buffer) - 1] = '\0';
 
    k = strlen(buffer) - 1;
    for(i = k; i >= 0 ; i--) {
        number[k - i] = buffer[i] - '0';
    }
}
 
void output_big_number(char *number)
{
    char i, j, k;
 
    for(k = MAX_NUMBER_LEN - 1; number[k] == 0 && k > 0; k--);
 
    for(i = k; i >= 0; i--) {
        printf("%d", number[i]);
    }
}
 
void add_big_numbers(char* sum, const char *a, const char* b)
{
    char carry = 0;
    char w = 0;
    char t;
    char i, j, k;
 
    for (t = 0; t <= MAX_NUMBER_LEN; t++)
    {
        w = a[t] + b[t] + carry;
        carry = w / 10;
        sum[t] = w % 10;
    }
}
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
19.06.2017, 14:16 17
Цитата Сообщение от bugaboo Посмотреть сообщение
А я разве не слежу?
А мне откуда знать?

Добавлено через 15 секунд
Цитата Сообщение от bugaboo Посмотреть сообщение
А я разве не слежу?
А мне откуда знать?
0
566 / 429 / 252
Регистрация: 24.02.2017
Сообщений: 1,526
19.06.2017, 16:16 18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
#include <fstream>
int main()
{
  ofstream simvol;
  char a[]="How to",b[]=" add two char",c[255]="\0";
 
 
  simvol.open("ab.txt", ios::app );
  simvol<<a;
  simvol<<b;
  simvol.close();
 
  ifstream in ("ab.txt");
  in.getline(c,sizeof(c));
  in.close();
  remove("ab.txt");  
  cout<<c;
  system(" pause >0");
 
    return 0;
}
0
-1 / 4 / 0
Регистрация: 12.06.2017
Сообщений: 60
19.06.2017, 23:38 19
Цитата Сообщение от Goffrua Посмотреть сообщение
bugaboo, извините пожалуйста, а Вы не могли бы скинуть весь код с объявлением массивов, их вводом, вызовом функции и выводом с?
Вот полный пример
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
using namespace std;
void sum(char*& c, char*& a, char*& b)
{
    size_t i, la, lb;
    la = strlen(a);
    lb = strlen(b);
    c = new char[la + lb + 1];
    if (la >= lb)
    {
        for (i = 0; i < la; i++)
        {
            c[i] = a[i];
            if (i < lb) c[la + i] = b[i];
        }
    }
    else
    {
        for (i = 0; i < lb; i++)
        {
            c[la + i] = b[i];
            if (i < la) c[i] = a[i];
        }
    }
    c[la + lb] = 0;
}
int main()
{
    //  Можно использовать статические и динамические массивы char*
    //  в любой комбинации и любого размера. Результирующий массив
    //  не должен быть инициализирован до вызова функции sum.
    char* a = "blabla";             //  статический массив
    char* b;
    char** c = new char*[6];        //  динамический массив char** для хранения суммарных строк
 
    for (char i = 0; i < 3; i++)
    {                               //  динамический массив - объявляем как душе угодно.
        b = new char [( a[0] + (a[1] - a[0] << a[0] - a[2] ) - a[2]) % (a[1] + strlen(a) - a[2] - i * (strlen(a) >> a[0] - a[2]))];     
        char j;
        for (j = 0; j < (i + 1) * 3; j++) b[j] = toupper(a[j % 3]); //  заполняем его как душе угодно
        b[j] = 0;
        sum(c[22 % (i * 4 + 1)], a, b);     //  заполняем суммой статического и динамического массивов строк c[0], c[2] и c[4]
        cout << "a = " << a << endl << "b = " << b << endl << "c = a + b = " << c[22 % (i * 4 + 1)] << endl << endl;
        sum(c[53 % (i + 4)], b, a);         //  заполняем суммой динамического и статического массивов строк c[1], c[3] и c[5]
        cout << "a = " << b << endl << "b = " << a << endl << "c = a + b = " << c[53 % (i + 4)] << endl << endl;
        delete[] b;
    }
    
    //      распоряжаемся полученными суммарными строками по своему усмотрению
 
    for (char i = 0; i < 6; i++) delete[] c[i]; //  не забываем чистить память, выделенную в функции sum
 
    delete[] c;                                 //  и вообще не забываем чистить память
 
    system("pause");
    return 0;
}
Как сложить два char?

Код функции немного оптимизировал, чтоб не бегала по лишним итерациям. Уж не знаю, где Вы там обнаружили длинную арифметику,
C++
1
size_t i, la, lb;
можно заменить хоть на
C++
1
char i, la, lb;
и всё равно будет переваривать строки, которые влезают в монитор. И чуть меньше памяти требовать. В сущности это просто пробег элементов массивов в цикле и складывание их в результат в нужном порядке.
0
Эксперт C
25440 / 15834 / 3386
Регистрация: 24.12.2010
Сообщений: 34,637
19.06.2017, 23:55 20
Цитата Сообщение от Goffrua Посмотреть сообщение
мне нужна именно длинная арифметика
Где-то у меня были старинные наработки. Волей случая недавно на них наткнулся - и ужаснулся. Так все усложнено и достаточно нелепо. Возможно, попробую все это хозяйство привести в приличный вид. Тогда и покажу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2017, 23:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как сложить два числа на битовом уровне?
Помогите срочно надо

Как сложить два случайных числа из массива?
Как сложить два случайных числа из массива с++

Как сложить побитно два числа в двоичной с/с
Добрый день форумчане! У меня программа по переводу из 10 с/с в 2 с/с. Она сделана используя...

Как сложить два символьных массива в один?
Извиняюсь если вопрос уже был, но я так и не нашел ответа. Как записать два слова в один...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.