相关疑难解决方法(0)

如何只使用正则表达式匹配有效的罗马数字?

考虑到我的另一个问题,我决定甚至不能创建一个匹配罗马数字的正则表达式(更不用说将生成它们的无上下文语法)

问题是只匹配有效的罗马数字.例如,990不是"XM",它是"CMXC"

我为此制作正则表达式的问题是,为了允许或不允许某些字符,我需要回顾一下.例如,让我们花费成千上万.

我可以允许M {0,2} C?M(允许900,1000,1900,2000,2900和3000).但是,如果匹配在CM上,我不能允许跟随字符为C或D(因为我已经在900).

我怎样才能在正则表达式中表达这一点?
如果它在正则表达式中根本无法表达,它是否可以在无上下文语法中表达出来?

regex roman-numerals

152
推荐指数
6
解决办法
6万
查看次数

如何对罗马数字数组进行排序?

我有一个包含罗马数字数组(当然是字符串).像这样:

 $a = array('XIX', 'LII', 'V', 'MCCXCIV', 'III', 'XIII');
Run Code Online (Sandbox Code Playgroud)

我想根据这些数字的数值对它们进行排序,因此结果应该类似于:

 $sorted_a = array('III', 'V', 'XIII', 'XIX', 'LII', 'MCCXCIV');
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:对罗马数字数组进行排序的最佳方法什么?我知道如何使用PHP的数组排序函数,我对比较函数内部的逻辑感兴趣.

编辑:为简单起见,我只是寻找一种方法来处理以标准方式构建的基本数字字符串(CCCC例如):

I, V, X, L, C, D, M
Run Code Online (Sandbox Code Playgroud)

检测结果

我花时间广泛测试了发布的所有代码示例.进行了两次测试,一次是随机排列的20个罗马数字,第二次是一个包含4000个罗马数字的阵列.相同的机器,大量的迭代,平均花费的时间,以及所有这些运行几次.当然这不是官方的,只是我自己的测试.

测试20个数字:

  1. hakre,bazmegakapa - 大约0.0005秒
  2. anemgyenge,Andrea,Dirk McQuickly - 约0.0010秒
  3. Joe Nelson - 大约0.0050秒
  4. Rob Hruska - 大约0.0100秒

测试4000个数字:

  1. hakre,bazmegakapa - 大约0.13秒
  2. anemgyenge - 大约1.4秒
  3. Dirk McQuickly,Andrea …

php arrays sorting roman-numerals

30
推荐指数
2
解决办法
6671
查看次数

用PHP编号的罗马数字

我需要用PHP将普通数字转换为罗马数字,我有这样的代码:

        <?php

function roman2number($roman){
    $conv = array(
        array("letter" => 'I', "number" => 1),
        array("letter" => 'V', "number" => 5),
        array("letter" => 'X', "number" => 10),
        array("letter" => 'L', "number" => 50),
        array("letter" => 'C', "number" => 100),
        array("letter" => 'D', "number" => 500),
        array("letter" => 'M', "number" => 1000),
        array("letter" => 0, "number" => 0)
    );
    $arabic = 0;
    $state = 0;
    $sidx = 0;
    $len = strlen($roman);

    while ($len >= 0) {
        $i = 0;
        $sidx = $len;

        while …
Run Code Online (Sandbox Code Playgroud)

php arrays numbers roman-numerals

22
推荐指数
2
解决办法
3万
查看次数

Roman Numeral为整数函数

基本上我正在尝试创建一个将罗马数字转换为整数的函数.

我有一个数组:

$roman_numerals=[
    'M'  => 1000,
    'CM' => 900,
    'D'  => 500,
    'CD' => 400,
    'C'  => 100,
    'XC' => 90,
    'L'  => 50,
    'XL' => 40,
    'X'  => 10,
    'IX' => 9,
    'V'  => 5,
    'IV' => 4,
    'I'  => 1
];
Run Code Online (Sandbox Code Playgroud)

我对PHP很新,所以我仍然习惯于思考的方式,所以请记住我还在学习:)

这是我的功能 - 或者我到目前为止:

//Array
function romanToInteger($key)
{
$roman_numerals=[
    'M'  => 1000,
    'CM' => 900,
    'D'  => 500,
    'CD' => 400,
    'C'  => 100,
    'XC' => 90,
    'L'  => 50,
    'XL' => 40,
    'X'  => 10,
    'IX' …
Run Code Online (Sandbox Code Playgroud)

php foreach integer function roman-numerals

7
推荐指数
1
解决办法
223
查看次数

标签 统计

roman-numerals ×4

php ×3

arrays ×2

foreach ×1

function ×1

integer ×1

numbers ×1

regex ×1

sorting ×1