【问题标题】:Perl Programming Exercise - How do I Compare ASCII Values?Perl 编程练习 - 我如何比较 ASCII 值?
【发布时间】:2016-10-18 22:27:21
【问题描述】:

我编写了以下程序来测试 Perl 评估 ASCII 值的能力,以及它的 if / elsif 语句。

我想避免使用语言的排序功能。

#test ASCII values using if and elsif
$s = '4';
$j = 'a';
$k = "AS";

#1st print the variable with the lowest ASCII value
if ($s <= $j && $s <= $k) {
    say $s;
    $s = 1000;
} elsif ($j <= $s && $j <= $k) {
    say $j;
    $j = 1000;
} elsif ($k <= $j && $k <= $s) {
    say $k;
    $k = 1000;
}

#print the variable with the 2nd lowest value
if ($s <= $j && $s <= $k) {
    say $s;
    $s = 1000;
} elsif ($j <= $s && $j <= $k) {
    say $j;
    $j = 1000;
} elsif ($k <= $j && $k <= $s) {
    say $k;
    $k = 1000;
}

#print the variable with the 3nd lowest value
if ($s <= $j && $s <= $k) {
    say $s;
    $s = 1000;
} elsif ($j <= $s && $j <= $k) {
    say $j;
    $j = 1000;
} elsif ($k <= $j && $k <= $s) {
    say $k;
    $k = 1000;
}

我的输出如下:

52
97
65
a
AS
4

但正确的结果是:

52
97
65
4
AS
a

提前谢谢你。欢迎提供有关如何改进我的问题写作的提示。

【问题讨论】:

  • 打开严格和警告,你会看到你正在尝试对非数字字符进行数字比较。所以,“使用严格;”和“使用警告;”并将你的变量声明为“my $s;”等。然后当你运行它时,你会看到警告。查看 perldoc perlop 以获取比较运算符。
  • 我很困惑。 529765 来自哪里?它们是输入4aAS 的第一个字符的序数值,但我看不出你在哪里计算它们。无论如何,Perl 有两组比较运算符。 &lt;&lt;===!=&gt;&gt;=&lt;=&gt;用于数值比较,ltle,@987654345,@9876543454 @、gtcmp 用于词法(字符串)比较。见perldoc perlop
  • 换句话说,如果你想得到 ASCII(并用它计算,通过使用==, &lt;, &gt; 运算符),你需要转换字符串。例如,您可以使用 ordunpack 来做到这一点。 (而且似乎你已经以某种方式做到了,因为你在“输出”中展示了这一点——所以显示完整的例子。)虽然 Perl 确实允许我们将数字或字符串存储在标量变量中,在使用它们时,您不能总是期望事情无论如何都能正常工作。
  • // , 你问了一个很好的问题,McNulty 先生。欢迎来到苦难!请考虑向我们展示您已经对该主题所做的一些研究,并将 Tim Bunce 对“linting”问题的回答应用到您提供给我们的代码示例中:stackoverflow.com/a/27133639/2146138
  • 您显示的代码甚至无法编译,因为您尚未在任何地方定义say。修复后,输出为aAS4,而不是您显示的文本。除非您准确地解释您的问题,否则我们无法帮助您。

标签: perl if-statement ascii


【解决方案1】:

始终使用use strict; use warnings;!后者会告诉您您正在使用数字比较运算符(例如&lt;),而您应该使用字符串比较运算符(例如lt)。

但您可以简单地使用以下内容:

say for sort $s, $j, $k;

【讨论】:

  • 是的,你是对的。谢谢你,也感谢其他人。当我应该使用字符串比较时,我使用了数值比较。
【解决方案2】:

您想使用ord 函数来获取参数第一个字符的数值。这是每个字符,而不是每个字节,这意味着 Unicode 可以正常工作。 http://perldoc.perl.org/functions/ord.html 了解更多信息。

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2017-12-20
    相关资源
    最近更新 更多