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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со спискоим указателей, Нужна помощь  
:(
    Опции темы
Deliverance
Дата 1.10.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Проблема в следующем,нужно переставить строки ,сравнив первые(и вторые) буквы строк,как сравнить буквы ,понятно,а как переставить строки не понятно,подскажите пожалуйста.

Код

# include <iostream>
# include <string.h>
# include <stdio.h>
# include <conio.h>
using namespace std;
// strncmp

void main()
{
    
    
    char *isk=NULL, Isk[10]={" "};
    char base[5][10]={"Ivanov","Petrov","Sidorov","Antonov","Zukerman"};
    char base1[1][10]={" "};
    
    
    
        for(int i=0;i<5;i++)
        {
            if(base[i]>base[i+1])
            {
                base1[1]=base[i];
                base[i]=base[i+1];
                base[i+1]=base1[1];
            }
                    
            cout<<base[i]<<'\n';

        }
}


Так не работает(
PM MAIL WWW ICQ Skype   Вверх
Fatkh
Дата 1.10.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вы сравниваете не строки, а указатели. Это вам не нужно. (char* - отнюдь не строка. Это указатель) Да и присвоить массив массиву у вас не получится.
Код

# include <iostream>
# include <stdlib.h>

int main()
{
    char base[5][10] = {"Ivanov", "Petrov", "Sidorov", "Antonov", "Zukerman"};
    char base1[10] = {0};

    for (int i = 0; i < 5; i++) {
        if (base[i][0] > base[i+1][0] && i < 4) {
            memcpy(base1, base[i], 10);
            memcpy(base[i], base[i+1], 10);
            memcpy(base[i+1], base1, 10);
        }
        std::cout << base[i] << '\n';
    }
}


PM MAIL Jabber   Вверх
Deliverance
Дата 2.10.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Спасибо,получилось а memcpy из какой библиотеки? и есть ,что-либо подобное в string.h?

Чуть не забыл,а можно всё это реализовать без доп массива?

Это сообщение отредактировал(а) Deliverance - 2.10.2009, 00:14
PM MAIL WWW ICQ Skype   Вверх
Dov
Дата 2.10.2009, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Deliverance,  тебе что нужно сделать? Отсортировать что ли?


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


Новичок



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

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



Цитата(Deliverance @  1.10.2009,  22:10 Найти цитируемый пост)
пасибо,получилось а memcpy из какой библиотеки? и есть ,что-либо подобное в string.h?

Из стандартной. И да, достаточно для использования memcpy хедера string.h.
PM MAIL Jabber   Вверх
zim22
Дата 2.10.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Fatkh @  1.10.2009,  23:45 Найти цитируемый пост)
 Да и присвоить массив массиву у вас не получится.

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

Код

struct Arr {
  int data[2][2];
};

Arr a1, a2;
a1.data[0][1] = 100;
a2.data[0][1] = 999;

a1 = a2;



--------------------
PM MAIL   Вверх
Deliverance
Дата 2.10.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Цитата(Dov @ 2.10.2009,  02:24)
Deliverance,  тебе что нужно сделать? Отсортировать что ли?

Ну да вобщето.


Собствено ,поясню,что я не могу понять.

Есть массив указателей,они указывают на строки.Нужно отсортировать по алфавиту.
Непонятно, КАК работать с этими указателями.Точнее.как их переставить не трогая сами строки.

Это сообщение отредактировал(а) Deliverance - 2.10.2009, 10:21
PM MAIL WWW ICQ Skype   Вверх
Dov
Дата 2.10.2009, 11:47 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Deliverance @  2.10.2009,  08:55 Найти цитируемый пост)
Точнее.как их переставить не трогая сами строки.

Как-то так, например:
Код
// ф-ция сравнения строк матрицы
int cmp( const void *a, const void *b )
{
    return strcmp( *( char ** ) a, *( char ** ) b );
}

int main()
{
    const int  m        = 5;
    char       p[m][10] = { "Sidorov", "Ivanov", "Zukerman", "Petrov", "Antonov" };
    char *     a[m]     = { p[0], p[1], p[2], p[3], p[4] };
    int        i;

    // сортируем по указателям
    qsort( a, m, sizeof( char * ), cmp );
    for( i = 0; i < m; i++ ) 
        cout << a[i] << ' ';
    cout << endl;

    // а список остаётся неизменным
    for( i = 0; i < m; i++ ) 
        cout << p[i] << ' ';
    cout << endl;

    return 0;
}



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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.12.2007
Где: Украина,Донецк

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



Спасибо,буду разбираться ,что к чему,работает.
PM MAIL WWW ICQ Skype   Вверх
Fatkh
Дата 2.10.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(zim22 @  2.10.2009,  07:23 Найти цитируемый пост)
если массивы статические и размеры одинаковые, то можно обернуть массивы в структуру и присваивать получится тогда.

Это плохое решение для С - теряется контроль, и плохое для С++ - там лучше пользоваться контейнерами.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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