Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Преобразование одномерного массива в двумерн, Преобразование массивов 
:(
    Опции темы
Eugeni
Дата 26.1.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Привет. Подскажите плиз неопытному…

Char pro[28] изначально ничего не содержит (обнулён), после чтения из файла  содержит следующее:

pro    “alo\nand\nhex\nadd\nbit\nbsd\n\0\0\0\0”
[0]    'a'
[1]    'l'
[2]    'o'
[3]    '\n'
[4]    'a'
[5]    'n'
[6]    'd'
[7]    '\n'
[8]    'h'
[9]    'e'
[10]    'x'
[11]    '\n'
[12]    'a'
[13]    'd'
[14]    'd'
[15]    '\n'
[16]    'b'
[17]    'i'
[18]    't'
[19]    '\n'
[20]    'b'
[21]    's'
[22]    'd'
[23]    '\n'
[24]    '\0'  
[25]    '\0' 
[26]    '\0'  
[27]    '\0'  
 
При выводе на экран получается
alo
and
hex
add
bit
bsd

Как отсортировать что бы он выводил?
add
alo
and
bit
bsd
hex

Или возможно как то char pro[28] преобразовать в char [7][4] 
что бы получить массив многомерный ?
Что то вроде - char pro[7][4] = { "alo", "and", "hex", "add", "bit", "bsd" ….. }

pro
[0]    'alo\n'
    [0] ‘a’
    [1] ‘l’
    [2] ‘o’
    [3] ‘\n’
[1]    'and\n'
    [0] ‘a’
          [1] ‘n’
……

Его то можно qsort ‘ом отсортировать и получить желаемый результат.
PM   Вверх
Dov
Дата 26.1.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Код
int compare(const void * a, const void * b)
{
    return (strcmp(*(char **)a, *(char **)b));
}

int main()
{
    char   pro[] = "alo\nand\nhex\nadd\nbit\nbsd\n\0\0\0\0";
    char * propro[10];
    char * p;
    int    i,
           count = 0;

    p = strtok(pro, "\n");
    while(p != NULL)
    {
        propro[count++] = p;
        p = strtok(NULL, "\n");
    }

    qsort(propro, count, sizeof(char *), compare);

    for(i = 0; i < count; i++)
       cout << propro[i] << endl;

    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Eugeni
Дата 27.1.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



2 Dov СПАСИБО!

А как записаит в файл этот сортированный массив?

пробую так:

Код

fwrite(*propro, strlen(*propro), 1, stream);


Но записывается только «add»

Дело в том что propro содержит следующее:

propro[10]
[0]    'add\0'
    [0] ‘a’
    [1] ‘d’
    [2] ‘d’
    [3] ‘\0’
[1]    'alo\0'
    [0] ‘a’
          [1] ‘l’
……

Т.е. видимо доходит до символа конец строки ‘\0’ и всё.

Пробовал сделать обратные преобразования, т.е. к виду:
pro    “alo\nand\nhex\nadd\nbit\nbsd\n\0\0\0\0”  только в отсортированном состояни,
но чёта «силёнок» не хватило.

Код

    char* buf[28];
    char* z;

    z = strtok(propro [10], "\0");
    while (z != NULL)
        {
            buf[28]=z;
            z=strtok(NULL, "\0");
                                 }
     cout << buf;      // выводит лажу какую то.



Возможно можно как то символ конца строки ‘\0’ заменить на перевод каретки ‘\n’.
Думаю тогда он записался бы в файл как надо.

PM   Вверх
Dov
Дата 27.1.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Eugeni @  27.1.2008,  12:12 Найти цитируемый пост)
А как записаит в файл этот сортированный массив?


Eugeni, можешь добавить в конце программы этот код:
Код
    FILE  * file = fopen(/*"имя_твоего_файла"*/, "w");
    for(i = 0; i < count; i++)
        fprintf(file, "%s\n", propro[i]);

    fclose(file);




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Eugeni
Дата 28.1.2008, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Dov, ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ! 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.