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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравниваю два массива типа char (C), запутался полностью :( 
:(
    Опции темы
Daevaorn
Дата 2.4.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(ressac @  2.4.2007,  21:01 Найти цитируемый пост)
эта версия стала на много короче и умнее

ты крут. делай ещё короче и умнейsmile а лучше воспользуйся всё-таки стандартными средствами.
PM MAIL WWW   Вверх
ressac
Дата 2.4.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Daevaorn, ну спасиб :(

Добавлено через 19 секунд
какими стандартными qsort что-ли?
PM MAIL   Вверх
Daevaorn
Дата 2.4.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(ressac @  2.4.2007,  21:32 Найти цитируемый пост)
какими стандартными qsort что-ли?

strncmp
strstr
PM MAIL WWW   Вверх
threef
Дата 2.4.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ressac, чем тебе мой вариант не пришелся ? Такой же "умный" как твой второй, только короче ?
PM MAIL   Вверх
ressac
Дата 2.4.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Daevaorn,  и как они помогут мне? я не вижу применения...

Добавлено через 4 минуты и 10 секунд
threef, твой не распознает массивы разной длины.
PM MAIL   Вверх
Daevaorn
Дата 2.4.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(ressac @  2.4.2007,  21:50 Найти цитируемый пост)
и как они помогут мне? я не вижу применения...

судя по тем обравкам информации о твоей задачи, которые ты тут написал, то эти функции могут решить твою проблему.
PM MAIL WWW   Вверх
threef
Дата 2.4.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

threef, твой не распознает массивы разной длины. 

распознает любой длины.
Код

#include <iostream>
using std::cout;
int compare( char * s1,char *s2)
{
    while(*s1 && *s2 && (*s1++==*s2++) );
    return *s1>*s2?1 :
                      *s1<*s2 ? -1 : 0;
}
main()
{
    char *c1="message:Привет sВолку !",
         *c2="message:Привет tсам !",
         *c3="message:Привет ";
    cout<<compare(c1,c2)<<'\n';
    cout<<compare(c1,c3)<<'\n';
    cout<<compare(c2,c1)<<'\n';

}

результат( а ты как бы расположил по алфавиту ? )
s < t 
c1 длиннее c2
t > s 
Код

-1
1
1

PM MAIL   Вверх
ressac
Дата 2.4.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



threef, c++ не понимаю, да ты прав она понимает разных размеров массивы, сорри.
только у меня она выдаёт глюк когда я например сравниваю только по одному символу напр. "a" и "b", или "1" и "9" она выдаёт 0 но ведь они не равны...


Цитата

а ты как бы расположил по алфавиту ? 


не совсем тебя понял...

Добавлено через 1 минуту и 30 секунд
Daevaorn, если использовать только лишь strncmp и strstr  то каким образом я рассортирую по алфавиту? :(
PM MAIL   Вверх
threef
Дата 2.4.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sorry, сказал бы сразу.

Код


int compare( char * s1,char *s2)
{
       // *s1 - проверяем содержимое s1 на признак конца строки
       // *s1==*s2 совпадают ли очередные символы ?
        // s1++ - переход к следующему символу строки

    while(*s1 && *s2 && (*s1==*s2) )s1++,s2++;

         // *s1 > *s2 - очередной символ 1-й строки больше : меньше: равны 
    return *s1>*s2 ? 1 :
                      *s1<*s2 ? -1 : 0;
       // если нужны русские, то тщательнее будет:
    #define U (unsigned char)
    return (U)*s1>(U)*s2 ? 1 :
                      (U)*s1<(U)*s2 ? -1 : 0;
       // это называется прямое приведение типов, на скорость в данном случае никак не влияет

}

PM MAIL   Вверх
ressac
Дата 2.4.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасиб пашет,но серовно не то что мне нужно. Есть проблемы с числами в твоём алгоритме, я сравниваю например 12 и 5 и функция возвращает -1 , тойсть 12 меньше получается? попробую у себя..


а мне именно надо  чтоб функция их расспознавала 

Код


запись идёт в этом порядке в файл...

hello
HeLL
Word
world
life
dead
DEAD
man
live
evil

//-------------------
а фунция сравнивать слова чтоб запись шла в алфовитном порядке... 
тойсть вот так...

dead
DEAD
evil
HeLL
hello
life
live
man
Word
world

понимаешь? :)





PM MAIL   Вверх
threef
Дата 2.4.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну ты даешь ! Посмотри у себя в WinCommander-е как у тебя сортируются файлы с именами    12  и 5 ! код символа у 1 меньше, чем у 5, пока ты этого не поймешь будешь мучаться и других заразОм. 
строка "BA" больше строоки "AAAA"
строка "4" больше строки "1024"
строка "9А" меньше строки "a"
Если ты хочешь сравнивать 16-тиричные представления чисел, то это и нужно писать в теме. Поставь нормально вопрос. 
  
PM MAIL   Вверх
ressac
Дата 2.4.2007, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я знаю что 1 меньше чем 5.

я же выше привел уже пример как должна идти сортировка


PM MAIL   Вверх
threef
Дата 2.4.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



dead  вот этого не понимаю
DEAD
evil
HeLL  или этого
hello
life
live
man
Word
world


У тебя кто больше - маленькие или большие ?
PM MAIL   Вверх
ressac
Дата 2.4.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



маленькие по идее должны быть первее... сорри 
PM MAIL   Вверх
threef
Дата 3.4.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



тогда сам настраивай свои сравнения , что-нибудь типа :
Код

inline bool in(char x,char limmin,char limmax)
{
   return x>=limmin && x<=limmax;
}
bool is_big(char c1,char c2)
{
   if( in(c1,'A','Z') && in(c2,'A','Z') ||
       in(c1,'a','z') && in(c2,'a','z') )
    return c1>c2 ? ...
   else
    // тут уж разберись для больших там, маленьких, русских и не очень 
   
}
int compare( char * s1,char *s2)
{
    
    while(*s1 && *s2 && (*s1==*s2) )s1++,s2++;
    return is_big(*s1>*s2) ? 1 :
                      is_big(*s1<*s2) ? -1 : 0;

}


Это сообщение отредактировал(а) threef - 3.4.2007, 17:18
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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