roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 13:02

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 02:34 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2009, 23:39
Сообщения: 26
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po
Чтото я не понимаю... тупой наверное...

Нарисуйте плиз другой вариант данной функции... тоже без проверок, чтоб как можно меньше переменных использовалось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 02:36 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
redcat писал(а):
Так иначе не будет перебора массива по символам, и while зациклится... Если я всё правильно понял...


Невнимательно читаешь, и невнимательно работаешь с указателями.
Указатели не простят.

А если понятней: ты инкреметируешь первый символ, а не указатель.

ПС: форум не злой, просто мы настойчиво рекомендуем не терять время на написание своего libc (без бж и ш)

Добавлено спустя 1 минуту 37 секунд:
zubr писал(а):
инкремент раньше разыменовывания сработал.


Забыл об этом, однако парсер сломало :)

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 02:45 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
redcat писал(а):
1 - заведомо извесно, что сравниваемые строки не будут пустыми;
2 - Эта функции будет работать быстрее, займёт меньше процессорного времени и памяти (опять-же из-за отсутствия проверки)

Самый большие и глупые ЗАБЛУЖДЕНИЯ, уж извини.

Добавлено спустя 7 минут 42 секунды:
Эх, молодежжж, вот смотрите и учитесь. Взял откудато из инета, еще добавил просто проверку вначале

Код:
int my_strcmp( const char* s1, const char *s2 )
{
    if( !s1 || !s2 )
        return 0;

    while( *s1 == *s2++ )
        if( *s1++ == 0 )
            return 0;

    return ( *( const unsigned char * )s1 - *( const unsigned char * )( s2 - 1 ) );
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 03:03 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2009, 23:39
Сообщения: 26
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po
ООО Спасибо вам великие мастера!!! Не принимайте меня в серьёз! ЫЫЫЫ


Vooon писал(а):
Невнимательно читаешь, и невнимательно работаешь с указателями.
Указатели не простят.

А если понятней: ты инкреметируешь первый символ, а не указатель.



char array[] = "AbCd";
char *s;
*s = &array[];

т.е. при *s++ *s равно 'B' , а не 'b' ????
помоему при *s++ я указываю на текущий адрес в котором записан символ 'B' (предположим 0хАА) и инкриминирую адрес, послечего указатель указывает на адрес в котором содержится 'b' (теперь 0хАВ)

Извиняюсь за возможно кривое обьяснение...

...да, и в таком случае(...ты инкреметируешь первый символ, а не указатель) моя функция не увидит разницу между строками "OK" и "OZ" т.к. мы увеличим первый символ каждой строки на один и получим 'P' Но это не так, и функция фунцыклирует, как говорится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 03:20 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Инкремент работает раньше, чем обращение по адресу.
Из-за этого твой вариант работает. Но при беглом осмотре запись *p++; заставляет подумать о *p+1;

Вот тебе маленький тест:
Код:
vovan@vovan-book:/tmp$ cat test.c
#include <stdio.h>

int main()
{
        char a[]="array";
        char * p;
        char c;

        p=a;

        c = *p;
        printf("c = '%c'\n", c);

        c = *p++;
        printf("c = '%c'\n", c);

        c = *p++;
        printf("c = '%c'\n", c);

        return 0;
}
vovan@vovan-book:/tmp$ gcc test.c
vovan@vovan-book:/tmp$ ./a.out
c = 'a'
c = 'a'
c = 'r'
vovan@vovan-book:/tmp$

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 03:44 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2009, 23:39
Сообщения: 26
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po
Vooon писал(а):
Инкремент работает раньше, чем обращение по адресу.
Из-за этого твой вариант работает. Но при беглом осмотре запись *p++; заставляет подумать о *p+1;


ХМ... оочень согласен по поводу того, что *p++; заставляет подумать о *p+1;
но в своей функции сравнения я не случайно инкремент делал....

Вот кстати немного модернизировал -
(я понимаю что изобретаю велосипед, но всё-же так нагляднее и понятнее для новичка)

Код:
int StrCompare(const char *str1,const char *str2){
        if(!*str1 || !*str2)return 0;
        while(*str1){
          if(*str1++!=*str2++)return 0;
        }
   return 1;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 02 фев 2009, 05:40 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Совет: не надо пытаться все записать в одну строку. Проще читать, меньше задумываться над приоритетами

Код:
if (*str1 != *str2) {
    return 0;
}
str1++; str2++;


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

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сравнение двух массивов.
СообщениеДобавлено: 03 фев 2009, 13:00 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2009, 23:39
Сообщения: 26
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po
Меня это не смущает.)))


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO