Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2012, 19:20
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

strcmp,strcasecmp
strcasecmp - проверяет на соотвествие двух строк с учетом регистра.
strcmp - проверяет на соотвествие двух строк без учетом регистра.

<?php
if(strcasecmp('Vas','Vas')) echo 'hi!'; else
echo 'bye ';

if(strcmp('vas','vas')) echo 'hi!'; else
echo ' bye';
?>


a)В первом ифе должно вывести hi! так как Левая строка Vas такая же как правая, но выводит почему то bye.
b)Во втором ифе должно вывести h! так как 2 стоки одинаковы, но выводит опять bye, почему?
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2012, 19:45
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

if (strcasecmp('Vas','Vas') == 0){
   echo('Hi'); 
}
else{
   echo('bye'); 
}
__________________
С моих слов записано верно.
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2012, 19:46
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

либо
if (!strcasecmp('Vas','Vas')){ 
   echo('Hi'); 
}
else{
   echo('bye'); 
}


upd: так делать не рекомендуется если первая строка короче — сработает условие.. лучший и правильный вариант с ==0.

функции strcasecmp и strcmp в случае, если строки идентичны возвращают ноль.. в условиях ноль — это false.
__________________
С моих слов записано верно.

Последний раз редактировалось T-sh, 10.04.2012 в 19:51.
Ответить с цитированием
  #4 (permalink)  
Старый 10.04.2012, 21:24
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

А почему здесь не вводил проверок на ноль, а сравнил 2 с 1 и выдало hi?
if(strcasecmp(2,1)) echo 'hi!'; else
echo 'bye ';
Ответить с цитированием
  #5 (permalink)  
Старый 10.04.2012, 21:31
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

если первая строка "больше" (длиннее, либо приоритет символов больше) второй — возвращается единица (т.е. true для условия), поэтому и выполнилось.

в целом так:
если A > B strcasecmp(A,B) = 1
если A < B strcasecmp(A,B) = -1
если A = B strcasecmp(A,B) = 0
__________________
С моих слов записано верно.
Ответить с цитированием
  #6 (permalink)  
Старый 10.04.2012, 21:48
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Прошу прощения, в документации написано.

Цитата:
Возвращает отрицательное число, если str1 меньше, чем str2,
http://ua2.php.net/manual/ru/function.strcasecmp.php

Написал так:
if(strcasecmp("Петя","ПЕтя")) echo 'hi!'; else
echo 'bye ';

Здесь str1 меньше чем str2, но возвращает true, а не отрицательное число. Почему?
Ответить с цитированием
  #7 (permalink)  
Старый 10.04.2012, 22:01
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

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

любое сравнение одинаковых буквы в нижнем и верхнем регистрах будет равно 32 (если сравнить строчную с прописной, то -32 соответственно)

а 32 > 0, и соответственно = true
__________________
С моих слов записано верно.
Ответить с цитированием
  #8 (permalink)  
Старый 10.04.2012, 22:17
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

А понял прикол, по таблицу ACII приоритет смотрится, получается код заглавной буквы меньше чем маленькой, то есть Петя>ПЕтя и поэтому возвращает тру, спс.
Ответить с цитированием
  #9 (permalink)  
Старый 10.04.2012, 22:21
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от kilogram Посмотреть сообщение
А понял прикол, по таблицу ACII приоритет смотрится, получается код заглавной буквы меньше чем маленькой, то есть Петя>ПЕтя и поэтому возвращает тру, спс.
да
__________________
С моих слов записано верно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск