我用PHP和Java编写了一个程序,生成长度为2的所有可能的单词。为什么程序使用Java而不是PHP工作?密码是一样的。
Java
package com.company;
public class Words {
public static void main(String[] args) {
generate("", 2);
}
static void generate(String prefix, int remainder) {
if (remainder == 0) {
System.out.println(prefix);
} else {
for (char c = 'A'; c <= 'Z'; c++) {
generate(prefix + c, remainder - 1);
}
}
}
}generate('', 2);
function generate($prefix, $remainder)
{
if ($remainder == 0) {
echo "$prefix\n";
} else {
for ($c = 'A'; $c <= 'Z'; $c++) {
generate($prefix . $c, $remainder - 1);
}
}
}发布于 2017-10-05 06:50:32
$c在PHP中具有字符串类型。与数字相比,++运算符对它的工作方式不同。
PHP在处理字符变量的算术运算时遵循Perl的惯例,而不是C的,例如,在PHP和Perl中,$a = 'Z'; $a++;将$a转换为'AA',而在Ca = 'Z'; a++;中,ASCII值为‘Z’,ASCII值为90,ASCII值为‘’[‘’)。注意,字符变量可以递增,但不能减少,即使这样,也只支持普通的ASCII字母表和数字( are、are和0-9)。递增/递减其他字符变量没有影响,原始字符串不变。
来源:http://php.net/manual/en/language.operators.increment.php
发布于 2017-10-05 06:49:14
将循环更改为
for ($c = 'A'; $c <= 'Z'; $c++) {至
foreach (range('A', 'Z') as $c){============================
编辑
对不起,我想找一份关于这件事的正式文件,但我做不到。所以我试着解释一下
在php中,当您比较两个字符串时,系统将尝试比较第一个字符和第二个字符串……当出现第一个不同的字符时,比较运算符将停止。
示例
$a = 'ABCDEZ';
$b = 'ABCEZZ';字符串$b大于$a,因为$a和$b开头的值是相同的,但是E(字符串$b的索引3中的值)大于D(字符串$a的索引3中的值),它们不需要比较其他字符
在这个问题中,最初的循环是
for ($c = 'A'; $c <= 'Z'; $c++) {直到$c = 'Z‘才行,但在那之后,$c++将是'AA’,当php开始比较它时,'AA‘< 'Z’并且循环继续,这就是为什么我将循环改为
foreach (range('A', 'Z') as $c){使它发挥作用
我希望你喜欢我的解释,不好意思,因为我没有看到任何关于这个的文档,这只是php的工作原理,我知道它是
https://stackoverflow.com/questions/46579259
复制相似问题