с пробитой головой калека
Доброго всем времени суток)
такой вопрос у меня: можно ли перевести двумерный массив строк в одномерный, чтобы там дальше с ним всякие преобразования делать?
я как-то попыталась это реализовать, но билдер ругается(
посмотрите пожалуйста, в чем ошибка?
код
такой вопрос у меня: можно ли перевести двумерный массив строк в одномерный, чтобы там дальше с ним всякие преобразования делать?
я как-то попыталась это реализовать, но билдер ругается(
посмотрите пожалуйста, в чем ошибка?
код
У вас массив a определён как двумерный массив >символов<, а не указателей. Так же, как и массив t - массив символов. Поэтому, в строке
вы передаёте не указатель на символ а символ.
да нет) если бы не это ругался, то я бы разобралась)
O
так. это значит, что мне t надо задать как массив указателей?
а то у меня как на зло с указателями плохо(
нет, вам не нужны массивы указателей
чтобы поправить ваш код, то вместо strcpy(t[l], a[i][j]) можно написать t[l]=a[i][j]. У вас же все равно идет посимвольное копирование
//и да, в таком случае он будет падать при выполнении из-за того, что одномерный массив коротковат
но вообще рекомендую почитать про функцию strcat()
Я не совсем понял поставленную задачу. В данный момент
может считаться объявлением a как массива из ста строк, каждая не длиннее 29 значащих символов (30'й - ноль, как указатель конца строки), а - как одну строку в 2499 символов (опять же с нулём на 2300'й позиции). Если вам нужно просто слить 100 строк в одну - то это одно, если же нужно перераспределить массив из 100x30 строк в один массив из 2500 строк - это другое.
блииин. точно) написала так, как вы сказали и все путем)
спасибо)
O
по идее его надо перераспределить.
но сейчас пока что все работает. надеюсь, что дальше сложностей не возникнет)
потому что в памяти такой массив nxm ничем не отличается от одномерного массива длиной n*m
то есть двумерный массив:
int array[2][3];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 3; j++)
array[i][j] = 1;
в памяти будет выглядеть как массив одномерный: 1 1 1 1 1 1
для того, чтобы с двумерным массивом работать как с одномерным нужно только нормально работать с указателями:
int array[n][m];
for(int* i = array[0]; i < array[n-1]+m; i++)
cout << *i;
этот кусочек выведет все содержимое массива.
как видно - это один цикл
i - это указатель.
array[0] - адрес начала первой строки
array[1] - соответсвенно адрес начала второй строки
аналогично
array[i]+j - это адрес житого элемента в итой строке
если перед адресом поставить *
то это будет сам элемент.
потому и пишется
cout << *i;
потому что выводим содержимое ячейки, а не сам адрес.
в конце повторюсь: это так можно только для массива, созданного не динамически.
потому что строки матрицы динамической не идут друг за другом в памяти
а в общем случае разбросаны по ней