Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка массива char[][]; 
V
    Опции темы
torero
Дата 22.6.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



   1.       У меня двумерный массив char x[][]. Я хочу, чтобы строки располагались в алфавитном порядке.
    В MSDN нашёл только методы (начмнаются на Sort), которые относятся к классу CArray.
    А как быть с моим массивом: что-нибудь есть готовое или самому разрабатывать?
    2.      Второй вопрос на ту же тему.  Иногда нужно первую букву char[], сделать заглавной (прописной).
    Может быть есть метод, который проверяет букву и, если она строчная, то переводит её в
     прописную.
PM MAIL   Вверх
zkv
Дата 22.6.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(torero @  22.6.2007,  19:38 Найти цитируемый пост)
1.       У меня двумерный массив char x[][]. Я хочу, чтобы строки располагались в алфавитном порядке.
    В MSDN нашёл только методы (начмнаются на Sort), которые относятся к классу CArray.
    А как быть с моим массивом: что-нибудь есть готовое или самому разрабатывать?

Почему именно char x[][], почему не использовать какие нибудь MFC-шные или STL-вские контейнеры?(Лично мне STL как то больше симпатизирует smile)
И сортировка тебе будет и прочие вкусности.
Кстати, stl позволяет отсортировать твой массив напрямую (100% гарантии не дам), но сортировка цельного массива далеко не самое быстрое действие, гораздо лучше сортировать какой-нибудь std::list.

Цитата(torero @  22.6.2007,  19:38 Найти цитируемый пост)
Второй вопрос на ту же тему.  Иногда нужно первую букву char[], сделать заглавной (прописной).
    Может быть есть метод, который проверяет букву и, если она строчная, то переводит её в
     прописную.

По любому есть, всплывает в памяти что то типа toupper(). Поиск то на что? smile
PM MAIL   Вверх
Earnest
Дата 22.6.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



1. std::sort + свой предикат сравнения
2. islower, toupper


--------------------
...
PM   Вверх
Ulysses4j
Дата 23.6.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1. Ну да, как сказала Earnest, как-то так:
Код
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cassert>

using namespace std;

int isLesserString( const char * stringOne, const char * stringTwo ) {
    assert( *stringOne != NULL );
    assert( *stringTwo != NULL );
    while( *stringOne == *stringTwo && *stringOne != NULL ) {
        ++stringOne;
        ++stringTwo;
    }
    return (*stringOne - *stringTwo < 0);
}

int main() {
    const char* strArr[] =  { "defg", "abc", "defgnm", "abt" };
    const size_t ARR_LENGTH = sizeof(strArr) / sizeof(*strArr);

    std::sort( strArr, strArr + ARR_LENGTH, isLesserString );

    copy( strArr, strArr + ARR_LENGTH, ostream_iterator<const char*>( cout, "\n" ) );
    
    system("pause");
}

Не хотелось делать для строк одинаковой длины (так выходит в случае работы с char[][]) - так что сделал для char *[]. Домашним заданием остается соответствующая переделка (кстати, тогда можно будет слегка упростить проверку).

2. 
Цитата(Earnest @  22.6.2007,  21:53 Найти цитируемый пост)
2. islower, toupper

Ну, я бы оставил toupper() - она уже делает все, что требуется torero:
Цитата
7.4.2.2 The toupper function

Synopsis
Код
#include <ctype.h>
int toupper(int c);


Description
2 The toupper function converts a lowercase letter to a corresponding uppercase letter.

Returns
3 If the argument is a character for which islower is true and there are one or more
corresponding characters, as specified by the current locale, for which isupper is true,
the toupper function returns one of the corresponding characters (always the same one
for any giv en locale); otherwise, the argument is returned unchanged.

Выдержка из C99, так что на С++ рекомендуется, конечно, включать <cctype>.


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
torero
Дата 25.6.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



    Пытался освоить библиотечные методы три дня, но ничего не добился. 
   Кончилось у меня терпение, и я написал эту сортировку сам. Может быть это методологически
   неправильно, но, зато, легче, быстрее и, главное, всё понятно. 
   Но за советы, всё равно спасибо, теперь знаю о существовании библиотеки STL, при необходи-
   мости буду её и  std  просматривать. 
  Третий ответ прочитал только сейчас. Обязательно разберусь. Ещё раз спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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