roboforum.ru

Технический форум по робототехнике.

Сравнение двух массивов.

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сравнение двух массивов.

Сообщение redcat » 02 фев 2009, 01:20

Можно-ли сравнить два массива символов (две строки) без перебора по символам?
т.е

Значит сначала -
Код: Выделить всёРазвернуть
char Array_1[]="ABC";
char Array_2[]="ABC";


Не работает !
Код: Выделить всёРазвернуть
if(Array_1 == Array_2); 


Работает -
Код: Выделить всёРазвернуть
if(Array_1[0] == Array_2[0] && 
           Array_1[1] == Array_2[1] &&
                     Array_1[2] == Array_2[2]);


Это тоже работает -
Код: Выделить всёРазвернуть
int result = 1;
for(int a=0; a<=2; a++){
if(Array_1[a] != Array_2[a])result =0; // если хоть одно не совпадение то result = 0
}
//result = 1 т.е. всё совпало.



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

Re: Сравнение двух массивов.

Сообщение Сергей » 02 фев 2009, 01:32

А как по твоему процессор должен сравнить сразу две строки? Конечно по символам.

Добавлено спустя 2 минуты 25 секунд:
redcat писал(а):Не работает !
Код: Выделить всёРазвернуть
if(Array_1 == Array_2); 


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

Re: Сравнение двух массивов.

Сообщение redcat » 02 фев 2009, 01:37

Сергей писал(а):И не будет работать, если ты внимательно изучишь Си, то поймешь - что в данном случае ты просто сравниваешь два адреса.


Спасибо, я "знал" но надеялся)))
Помоему, в дельфи, две строки сравнивать можно. Там, если мне память не изменяет, тип string есть
Последний раз редактировалось redcat 02 фев 2009, 01:39, всего редактировалось 1 раз.
Аватара пользователя
redcat
 
Сообщения: 26
Зарегистрирован: 27 янв 2009, 23:39
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po

Re: Сравнение двух массивов.

Сообщение Vooon » 02 фев 2009, 01:38

Кури стандартную библиотеку Си, в часности: [[en:string.h]]

(Сергей, это просто пхп головного мозга : )
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Сравнение двух массивов.

Сообщение redcat » 02 фев 2009, 01:43

Пхп однако хорошо, но для МК слишком жирно)))

Vooon Спасибо за подсказку, но я пожалуй быстрее функцию сваяю, чем в дебрях string.h разберусь. Ленивый я.
Последний раз редактировалось redcat 02 фев 2009, 01:46, всего редактировалось 1 раз.
Аватара пользователя
redcat
 
Сообщения: 26
Зарегистрирован: 27 янв 2009, 23:39
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po

Re: Сравнение двух массивов.

Сообщение Сергей » 02 фев 2009, 01:47

Все где ты видел где "типо" сравнивают две строки - это просто типы, операторы, и тп.
В процессе выполнения сравнения, который тебе кажеца будто сравнивает сразу всю строку, в любом случае идет сравнение символов, просто этот процесс сокрыт от тебя для удобства. А в Си такого нет, здесь можно наглядно видеть что происходит :)

Добавлено спустя 1 минуту 5 секунд:
redcat писал(а): я пожалуй быстрее функцию сваяю, чем в дебрях string.h разберусь. Ленивый я.

С учетом твоих познаний в Си, ЛУЧШЕ будет использовать ГОТОВУЮ функцию, есть очень большая вероятность того что ты просто криво это напишешь.

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

Re: Сравнение двух массивов.

Сообщение zubr » 02 фев 2009, 01:50

у нас демократическая страна. Пусть пишет. Будет о чем поговорить :)
За здравый смысл у нас принимается мнение большинства.
zubr
 
Сообщения: 431
Зарегистрирован: 20 ноя 2008, 19:31
Откуда: Чернобыль
прог. языки: асмемблер
ФИО: Валентин Семенович

Re: Сравнение двух массивов.

Сообщение Vooon » 02 фев 2009, 01:55

А смысл писать велосипед?
И поиском compare [[en:strcmp]] совсем не видать?
Лучше разберись что предоставляет стандартная библиотека, благо все хорошо документировано.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Сравнение двух массивов.

Сообщение Сергей » 02 фев 2009, 02:00

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

Re: Сравнение двух массивов.

Сообщение redcat » 02 фев 2009, 02:02

блин...
Вот функция, может кому сгодицца
Код: Выделить всёРазвернуть
int StrCompare(const char *str1,const char *str2){
        while(*str1){
          if(*str1!=*str2)return 0;
        *str1++; *str2++;
        }
   return 1;
}
Аватара пользователя
redcat
 
Сообщения: 26
Зарегистрирован: 27 янв 2009, 23:39
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po

Re: Сравнение двух массивов.

Сообщение Vooon » 02 фев 2009, 02:12

А зачем ты инкрементируешь первый символ строк?
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Сравнение двух массивов.

Сообщение galex1981 » 02 фев 2009, 02:15

спасибо, но по-моему она аналогична стандартной strcmp
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Сравнение двух массивов.

Сообщение Сергей » 02 фев 2009, 02:16

и кроме того что сказал Vooon, я могу сломать твою функцию, вот так
Код: Выделить всёРазвернуть
StrCompare( NULL, NULL );


Добавлено спустя 34 секунды:
galex1981 писал(а):спасибо, но по-моему она аналогична стандартной strcmp

Она не аналогична, потому что она не работает
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Сравнение двух массивов.

Сообщение redcat » 02 фев 2009, 02:28

Злой форум однако. Все готовы новичков сожрать.
Сергей Я в этой функции не делал проверок, т.к
1 - заведомо извесно, что сравниваемые строки не будут пустыми;
2 - Эта функции будет работать быстрее, займёт меньше процессорного времени и памяти (опять-же из-за отсутствия проверки)

Vooon писал(а):А зачем ты инкрементируешь первый символ строк?

Так иначе не будет перебора массива по символам, и while зациклится... Если я всё правильно понял...

Добавлено спустя 1 минуту 46 секунд:
Сергей писал(а):
galex1981 писал(а):спасибо, но по-моему она аналогична стандартной strcmp

Она не аналогична, потому что она не работает


Всёже galex1981 прав, функция аналогична, но не идентична.
Аватара пользователя
redcat
 
Сообщения: 26
Зарегистрирован: 27 янв 2009, 23:39
Откуда: K-Jarve, Estonia
прог. языки: PHP, C.
ФИО: Alex Po

Re: Сравнение двух массивов.

Сообщение zubr » 02 фев 2009, 02:31

Vooon писал(а):А зачем ты инкрементируешь первый символ строк?

он хотел все попортить, но не смог. инкремент раньше разыменовывания сработал.
Велик у нас будет о 7 колесах?
За здравый смысл у нас принимается мнение большинства.
zubr
 
Сообщения: 431
Зарегистрирован: 20 ноя 2008, 19:31
Откуда: Чернобыль
прог. языки: асмемблер
ФИО: Валентин Семенович

След.

Вернуться в Микроконтроллеры

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

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