Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
1

Сложение двух динамических массивов char* в одну строку

10.12.2014, 21:28. Показов 4816. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В массивы вводятся данные, масcивы вида :
C++
1
2
3
4
int n,k;
char *a,*b;
   a=new char[n];
   b=new char[k];
Как вывести результирующую строку БЕЗ подключения библиотеки работы со строками
есть толкьо одна # include <iostream>
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2014, 21:28
Ответы с готовыми решениями:

Сложение массива типа char в одну переменную
Здравствуйте, уважаемые форумчани, помогите разобраться с такой простой задачей. Есть массив...

Слияние двух динамических массивов…
Приветствую Вас!:) Задача такая: Даны два массива: A и B (числовые), упорядоченные по...

Объединение двух динамических массивов
Не могу соединить два динамических массива в один большой (под катом описание проблемы): cin &gt;&gt; n;...

Поочередная загрузка двух динамических массивов
Всем доброго дня. Такая задача: в программе существуют 2 динамических массива. Данные в них...

7
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
10.12.2014, 21:44 2
Лучший ответ Сообщение было отмечено Fanera как решение

Решение

C++
1
2
3
4
5
6
7
char* c=new char[n+k];
int j=0;
for(int i=0;a[i];i++)
   c[j++]=a[i];
for(int i=0;b[i];i++)
   c[j++]=b[i];
c[j]=0;
1
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
11.12.2014, 00:05  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
C++
1
c[j]=0;
Поясните, это что то типо "\0" признака конца строки или что то другое?
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
11.12.2014, 00:12 4
О мышеня прилетел ).
https://ru.wikipedia.org/wiki/... 0%BB%D1%8B
\0 Этот символ ничего не делает. Некоторые терминалы изображают его как пробел, но это неправильно. Часто NULL используют для обозначения конца цепочки символов (например, в языке C).
Добавлено через 36 секунд
Короче указывает что там пусто - нет в Африке капусты )).

Добавлено через 1 минуту
В том что выше написал сверяется с константным числом 0.
0
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
11.12.2014, 00:21  [ТС] 5
Redee, Так вот чтобы корректно отобразить строку в моем случае массив командой cout << c << endl; так понимаю что последними элементами массива были как раз они "\0" поэтому и интерисуюсь значениями 7 строки
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
11.12.2014, 02:06 6
C++
1
2
3
4
5
6
char ch[] = "абвг5608";
 
    int m=0;
    while(ch[m] != '\0')
        m++;
    cout << m << endl;
либо >>

C++
1
2
3
4
5
6
char ch[] = "абвг5608";
 
    int m=0;
    while(ch[m] != 0)
        m++;
    cout << m << endl;
Добавлено через 4 минуты
либо еще вот так )) >>
C++
1
2
3
4
5
6
    
char* tXt = "абвгд6089";
int n=0;
while(tXt[n] != '\0')
    n++;
cout << n << endl;
0
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
11.12.2014, 10:25  [ТС] 7
Redee, Все примеры считают количество символов в строке до "признака" конца строки.
Причем русские буквы считаються не правильно (возможно из за Линукса)
Но как все это поможет вставке признака строки в новый результирующий массив?
0
31 / 40 / 6
Регистрация: 04.10.2014
Сообщений: 185
11.12.2014, 15:40 8
Вообщето признак строки, это чтобы быть точнее признак перевода строки.
А этот признак включает в себя "\n".
Под форточками "\r\n" но так как "\n" везде есть как этот "признак", то можем считывать без зазрения совести именно "\n".

Впринципе то что дал выше, это счет именно позиций букв.
Стоит заметить что буквы имеют разный размер.

Как раз кое чем похожим занимаюсь, аля борьба с utf-8 и консоль "цмд".
То есть я могу посчитать в этом случае размер общий строки и догадаться сколько занимает буква из разных языков алфавита. А вот сколько занимает именно эта буква НЕ могу узнать (да я не знаю как...).
Допустим в случае с массивом на int у нас все просто и понятно каждая переменная массива занимает 4 байта.
То есть одномерный массив на 2 переменных будет = 8 байтам.
В случае с char / char* дела обстоят куда сложнее.
Так как если мы будем брать sizeof(tXt[n]) то вернем 1 байт согласно спецификации на char.
Но если будем выводить cout << tXt[n] и там "иероглиф" то выведем этот иероглиф.
Но если мы этот иероглиф 1 проверим под кодировкой utf-8 то он будет равняться 3 байтам.
Видимо есть другие НЕ стандартные библиотеки работы с символами Отличными от ASCII символов, так как они занимают именно по 1 байту!
Допустим в utf-8 русские буквы занимают по 2 байта.

Так что надо что то другое для этих задач.
Ладн не парься а то мозг лопнет )).

Вот дополнительный код >>
И да пока не забыл обычные массивы на "пенсию", используем vector-ы + объекты + тупли.
Много где рекомендуют именно векторы место обычных массивов.
И гораздо удобнее оперировать данными в таком массиве.
Если что то низкоуровневое ближе к чистому Си конечно обычные массивы приоритетнее, но если смотрим в сторону будущего и оптимизации разработки то векторы берем за основу полюбому.
Бррр много букв.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
void main()
{
    // файл в кодировке 65001 - UTF-8 без BOM (without signature)
 
    system("chcp 65001");
    char str[] = "дёГт";
    // вывело 9 - по 2 байта на русс символ + 1 байт конечный
    cout << sizeof(str) << endl;
    printf(str);
    cout << endl;
}
1
11.12.2014, 15:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2014, 15:40
Помогаю со студенческими работами здесь

Сложение двух const char
Приветствую. Подскажите, как сложить две const char. char lp;...

Иницилизация двух одномерных динамических массивов в классе
Unit1.h(43): E2451 Undefined symbol 'W' выдает такую ошибку, вопрос почему на точно так же...

Вывести уникальные элементы двух динамических массивов
Дано два динамических массива одинаковой размерности. Нужно вывести уникальные элементы. Мой код...

Заполнение двух динамических массивов случайными вещественными числами
У массивов получаются одинаковые значения, почему? Что посоветуете? #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru