Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Использование функции strcmp()
 
 автор: simonter   (01.03.2007 в 02:50)   письмо автору
 
 

Почемуто не работает функция сравнения строк strcmp()
Код:

<?
$name 
"User_104";
$namebase file ("userbase.txt")
//В массиве $namebase нужно найти значение $name(оно там точно есть)
//и определить номер этого элемента массива
foreach($namebase as $direct => $kluch
{
$re = (strcmp (namekluch)); //должна хотябы раз вернуть значение "0"
if($re==0)
 {
 echo 
$direct;
 }
else
 {
 
echщ "значение не найдено";
 }
}
?>

Проблема в том что функция (strcmp (name, kluch)) все время возвращает -1, даже если $name равна $kluch, кто знает в чем сдесь ошибка?
Заранее спасибо...

   
 
 автор: acdcee   (01.03.2007 в 03:04)   письмо автору
 
   для: simonter   (01.03.2007 в 02:50)
 


<? 
$name 
"User_104"
$namebase file ("userbase.txt")  - первая ошибка ты забыл поставить ;
//В массиве $namebase нужно найти значение $name(оно там точно есть) 
//и определить номер этого элемента массива 
foreach($namebase as $direct => $kluch)  

$re = (strcmp (namekluch)); //должна хотябы раз вернуть значение "0" 
if($re==0
 { 
 echo 
$direct
 } 
else 
 { 
 
echщ "значение не найдено"
 } 

?>


Вот скрипт и пояснение в пример

int strcmp(string str1, string str2)

Эта функция сравнения строк. Она сравнивает две строки и возвращает:
0 - если строки полностью совпадают;
1 - если, строка str1 лексикографически больше str2;
1 – если, наоборот, строка str1 лексикографически меньше str2

Функция является чувствительной к регистру, т.е. регистр символов влияет на результаты сравнений (поскольку сравнение происходит побайтово).

Пример:

<?
   $str1 
"ttt";
   
$str2 "tttttttttt";
   echo(
"Result of strcmp ($str1 , $str2) is ");
   echo(
strcmp (str1str2)); echo("<br>");
   echo(
"Result of strcmp ($str2$str1)> is ");
   echo(
strcmp (str2str1)); echo("<br>");
   echo(
"Result of strcmp ($str1 , $str1) is ");
   echo(
strcmp (str1,str1));
?>

   
 
 автор: simonter   (01.03.2007 в 09:56)   письмо автору
 
   для: acdcee   (01.03.2007 в 03:04)
 

Все спасибо, но я понял в чем ошибка была, и вовсе не в знаке " ; "(я его тут просто забыл написать ::))),
ОКАЗЫВАЕТСЯ ошибка в учебнике, который я с этого сайта качал междупрочим...
там было написано ->
<?
   $str1 
"ttt";
   
$str2 "tttttttttt";
   echo(
"Result of strcmp ($str1 , $str2) is ");
   echo(
strcmp (str1str2)); echo("<br>");
   echo(
"Result of strcmp ($str2$str1)> is ");
   echo(
strcmp (str2str1)); echo("<br>");
   echo(
"Result of strcmp ($str1 , $str1) is ");
   echo(
strcmp (str1,str1));
?>
<- ТАК вот друзья, оказывается без " баксов" ничего работать не будет, я кстати сразу обратил внимание, что перед переменными str не стоит знак бакс"$" , но я подумал что это такая особенность кода, а вот и нет "баксы" надо писать.
Я надеюсь что в будущем эта ошибка в учебнике будет устранена, а то я представляю как бедные юзеры будут ломать целый день голову (как я), почему ничего у них не работает.

   
 
 автор: Trianon   (01.03.2007 в 10:25)   письмо автору
 
   для: simonter   (01.03.2007 в 09:56)
 

to cheops.
Игорь! Там ( http://softtime.ru/bookphp/gl3_11.php )действительно пример в стиле C!
Надо бы поправить....

   
 
 автор: cheops   (01.03.2007 в 13:54)   письмо автору
 
   для: Trianon   (01.03.2007 в 10:25)
 

Да, есть такое дело - поправим.

   
 
 автор: simonter   (01.03.2007 в 15:30)   письмо автору
 
   для: cheops   (01.03.2007 в 13:54)
 

Информация о функции strcmp() в учебнике немного не точна, исходя из материала эта функция выводит либо 0 либо 1 или -1, а на самом деле вывод зависит от длины сравниваемых строк, и может быть равен хоть 20 или -315 .

Я тут набросал примерно текст

int strcmp(string str1, string str2)

Эта функция сравнивает две строки посимвольно (точнее, бобайтово) и возвращает:
0 - если строки полностью совпадают;
-1 - если строка str1 лексикографически меньше str2 на 1символ;
1 - если, наоборот, str1 "больше" str2 на 1 символ.
Так как сравнение идет побайтово, то регистр символов влияет на результаты сравнений.
Пример:

<?
$str1
="my";
$str2="mysql";
echo 
strcmp($str1,$str2); //выведет 3, т.к. строка str2 лексикографически больше str1 на 3симв   
echo "<BR>";
echo 
strcmp($str2,$str1); //выведет -3 т.к. строка str1 лексикографически меньше str2 на 3симв  
?>

А вобщем учебник отличный. Тока бывают некоторые неточности. Ну а кто тне делает ошибок...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования