我设法让我的代码将大多数罗马数字转换为适当的十进制值.但它不适用于某些特殊情况.示例:XCIX= 99但我的代码打印出来109.
这是我的代码.
public static int romanConvert(String roman)
{
int decimal = 0;
String romanNumeral = roman.toUpperCase();
for(int x = 0;x<romanNumeral.length();x++)
{
char convertToDecimal = roman.charAt(x);
switch (convertToDecimal)
{
case 'M':
decimal += 1000;
break;
case 'D':
decimal += 500;
break;
case 'C':
decimal += 100;
break;
case 'L':
decimal += 50;
break;
case 'X':
decimal += 10;
break;
case 'V':
decimal += 5;
break;
case 'I':
decimal += 1;
break;
}
}
if (romanNumeral.contains("IV")) …Run Code Online (Sandbox Code Playgroud) 使用PHP,我想将包含罗马数字的字符串转换为其整数表示.我需要这个,因为我需要对它们进行计算.
仅识别基本的罗马数字字符就足够了,例如:
$roman_values=array(
'I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000,
);
Run Code Online (Sandbox Code Playgroud)
这意味着最高可能的数字是3999(MMMCMXCIX).我将N用来表示零,除了只支持正整数.
我不能将PEAR库用于罗马数字.
我在SO上发现了一个很好的问题,关于如何测试字符串是否包含有效的罗马数字:
编码的最佳方法是什么?
龙书包括使用语法指导的翻译方案将整数转换为罗马数字的练习.
怎么能完成?
我尝试了典型的排序功能,并检查项目是否为字符串.但我得到一个非常奇怪的输出.尝试了多种不同的方法.
var arr = [{section: '12.2.a'},
{section: '12.2.b.iii'},
{section: '12.2.c'},
{section: '12'},
{section: '12A'},
{section: '12.3.b'},
{section: '12.3.c'},
{section: 'Q2'},
{section: 'Q32'},
{section: 'Q6'},
{section: 'Q5'}]
var arr2 = arr.sort(function(a, b) {
var nums1 = a.section.split(".");
var nums2 = b.section.split(".");
for (var i = 0; i < nums1.length; i++) {
if (nums2[i]) {
if (nums1[i] !== nums2[i]) {
if (isNaN(parseInt(nums1[i])) && isNaN(parseInt(nums2[i]))) {
return nums1[i].localeCompare(nums2[i]);
}
return parseInt(nums1[i]) - parseInt(nums2[i]);
}
} else {
return 1;
}
}
return -1; …Run Code Online (Sandbox Code Playgroud) 我有一份所有莎士比亚十四行诗的清单,我正在制作一个搜索每个十四行诗的功能.但是,我希望能够使用阿拉伯数字搜索它们(例如"/ sonnet 122"..txt的格式如下:
I
This is a sonnet
II
This is a second sonnet
Run Code Online (Sandbox Code Playgroud)
我现在正在使用节点来尝试这样做,但是我从昨天起就一直在尝试无济于事.我昨天的最后一次尝试是使用'替换'方法:
'use strict';
//require module roman-numerals, which converts roman to arabic
var toArabic = require('roman-numerals').toArabic;
//require file-handling module
var fs = require('fs');
fs.readFile('sonn.txt', 'utf8', function (err,data) {
if (err) {
console.log(err);
} else {
var RN = /[A-Z]{2,}/g;
var found = data.match(RN); //finds all roman numbers and puts them in an array
var numArr = [];
for (var i = 0; i < found.length; i++ ){ …Run Code Online (Sandbox Code Playgroud) 我想在字符串中捕捉罗马数字(80以下的数字足够好).我找到了很好的基础,你如何只使用正则表达式匹配有效的罗马数字?.问题是:它处理整个字符串.我还没有找到如何检测字符串内的罗马数字的解决方案,因为没有强制要求,每个组都可以是可选的.到目前为止我尝试过这样的事情:
my $x = ' some text I-LXIII iv more ';
if ( $x =~ s/\b(
(
(XC|XL|L?X{0,3}) # first group 10-90
|
(IX|IV|V?I{0,3}) # second group 1-9
)+
)
\b/>$1</xgi ) { # mark every occurrence
say $x;
}
__END__
><some>< ><text>< ><>I<><-><>LXIII<>< ><>iv<>< ><more><
desired output:
some text >I<->LXIII< >iv< more
Run Code Online (Sandbox Code Playgroud)
因此,这个也可以自己捕获字边界,因为所有组都是可选的.如何完成它?如何强制执行这两个组中的一组,而无法确定哪一组是强制性的?其他捕捉罗马人的方法也很受欢迎.
考虑一下这个脚本,该脚本基于SO 267399关于解析罗马数字的答案 ,尽管解析罗马数字是这个问题的偶然问题.
#!/usr/bin/env perl
#
# Based on answer to SO 0026-7399
use warnings;
use strict;
my $qr1 = qr/(?i:M{1,3})/;
my $qr2 = qr/(?i:C[MD]|D?C{1,3})/;
my $qr3 = qr/(?i:X[CL]|L?X{1,3})/;
my $qr4 = qr/(?i:I[XV]|V?I{1,3})/;
print "1000s: $qr1\n";
print " 100s: $qr2\n";
print " 10s: $qr3\n";
print " 1s: $qr4\n";
# This $qr is too simple — it matches the empty string
#my $qr = qr/($qr1?$qr2?$qr3?$qr4?)/;
my $qr = qr/\b((?:$qr1$qr2?$qr3?$qr4?)|(?:$qr2$qr3?$qr4?)|(?:$qr3$qr4?)|(?:$qr4))\b/;
print " Full: $qr\n";
while (<>)
{
chomp;
print " …Run Code Online (Sandbox Code Playgroud) 我的数据集'ad'中有一个住宅地址专栏.我想检查没有数字(包括罗马数字)的地址.我正在使用
ad$check <- grepl("[[:digit:]]",ad$address)
Run Code Online (Sandbox Code Playgroud)
标记出没有数字的地址.如何对包含罗马数字的地址执行相同操作?
例如:"X楼,DLF Building-III,ABC City"
我有以下字符串:
str = "MMX Lions Television Inc"
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为:
conv_str = "2010 Lions Television Inc"
Run Code Online (Sandbox Code Playgroud)
我有以下函数将罗马数字转换为等价的整数:
numeral_map = zip(
(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1),
('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I')
)
def roman_to_int(n):
n = unicode(n).upper()
i = result = 0
for integer, numeral in numeral_map:
while n[i:i + len(numeral)] == numeral:
result += integer
i += len(numeral)
return result
Run Code Online (Sandbox Code Playgroud)
我将如何使用re.sub这里获取正确的字符串?
(注意:我尝试使用regex此处描述的内容: …
我有一个字符串列表,其中包含表示为拉丁数字的和弦,如下所示:
['ii7', 'vi7', 'V', 'IVadd9', 'Iadd9', 'V', 'IVmaj7', 'ii7', 'vi7', 'V', 'IVadd9', 'Iadd9', 'V', 'IVmaj7']
Run Code Online (Sandbox Code Playgroud)
我想将这些字符串分成 3 个子列表,如下所示:
numerals = ['ii', 'vi', 'V', 'IV', 'I', 'V', 'IV', 'ii', 'vi', 'V', 'IV', 'I', 'V', 'IV']
chord_type=['min', 'min', 'maj', 'maj', 'maj', 'maj','maj', 'min', 'min', 'maj', 'maj', 'maj', 'maj','maj']
extentions=['7','7','', 'add9','add9','','7','7','7','','add9','add9','','7']
Run Code Online (Sandbox Code Playgroud)
(如您所见,大写字母的罗马数字对应和弦类型中的“maj”,非大写字母的罗马数字对应“min”。)
在我的例子中所有可能的罗马数字:
i, ii, iii, iv, v, vi, vii, I, II, III, IV, V, VI, VII
Run Code Online (Sandbox Code Playgroud)
请注意,我们不需要M, C, L, X。
我知道我可以从 Python 中的字符串中的字母中提取或拆分数字,如此处所述,但如何提取罗马数字?
我考虑过使用匹配 …