Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找字符串是否为回文。约束:不将字符串存储在任何额外变量中_Php_Algorithm_Palindrome - Fatal编程技术网

Php 查找字符串是否为回文。约束:不将字符串存储在任何额外变量中

Php 查找字符串是否为回文。约束:不将字符串存储在任何额外变量中,php,algorithm,palindrome,Php,Algorithm,Palindrome,检查我尝试过的代码 我的问题和其他问题有点不同。我想为回文生成一个高效的代码。因此我添加了一些约束。约束:不将字符串存储在任何额外变量中。只使用一个循环。我在php中尝试过,但没有呈现输出。我在图片中使用了相同的逻辑。我是php新手。我需要一些帮助来检查我的代码是否正确,如果错误,可以进行哪些更改?无论是php还是任何其他oops语言,我只需要检查我的逻辑是否正确 PHP代码: class user{ public function __construct(){ $this->

检查我尝试过的代码

我的问题和其他问题有点不同。我想为回文生成一个高效的代码。因此我添加了一些约束。约束:不将字符串存储在任何额外变量中。只使用一个循环。我在php中尝试过,但没有呈现输出。我在图片中使用了相同的逻辑。我是php新手。我需要一些帮助来检查我的代码是否正确,如果错误,可以进行哪些更改?无论是php还是任何其他oops语言,我只需要检查我的逻辑是否正确

PHP代码:

class user{
 public  function __construct(){
   $this->palindrome();

    }

public function palindrome(){
 str ="abba";
 i=0;
 while(str[i] == str[strlen(str-1)-i])
{
i++;
}
  if(i > strlen(str)/2)
 {
 return 0;
  }
   }


   }
  $obj = new user;
一些小错误:

str[strlen(str-1)-i]
=>
strlen(str-1-i])

检查完成后,您不会终止循环。 您可以将if语句移动到循环中并返回true。
或者使用for循环0->length/2,如果字符不相等,则返回false。

保留逻辑,更正语法错误

<?php

class user {

    public function __construct() {
        if ($this->palindrome()) {
            echo 'Yes, Palindrome';
        } else {
            echo 'Not a palindrome';
        }
    }

    public function palindrome() {
        //Need $ symbol
        $str = "abba";

        $i = 0;
        //                                 \/
        while ($str[$i] == $str[strlen($str) - ($i + 1)]) {
            $i++;

            if ($i > strlen($str) / 2) {
                return 1;
            }
        }
        return 0;
    }

}

;

$obj = new user();

我更改了结构,但保留了您的逻辑

<?php

class User {
    private $str;

    public function __construct($str) {
        $this->str = $str;
    }

    public function palindrome() {
        $i = 0;
        while ($this->str[$i] == $this->str[strlen($this->str) - ($i + 1)]) {
            $i++;

            if ($i > strlen($this->str) / 2) {
                return 1;
            }
        }
        return 0;
    }

}

$obj = new User("abba");

echo $obj->palindrome(); // can be zero or one

这个解决方案需要是OO吗?不需要。如果是过程性的,那就好了。我会试着在以后把它转换成OO。谢谢。以后尽量只使用必要的标签。当你标记一组语言而不需要任何语言时,大多数人认为它是“垃圾邮件标签”。是的,当然。我会记住这一点,为什么不只是字符串,与原始的比较呢?不需要额外的变量,根本不需要循环,但我仍然不知道是否满足了所有约束条件。我认为您的逻辑只使用一个循环和一个变量来存储字符串。也许是这样。