我正在尝试将字符串分成用于读取罗马数字的部分。例如,如果用户输入
"XI"
我希望程序能够理解我是1而X是10才能使这样的数据验证起作用。
if(string roman == "X") int roman += 10;
etc.
答案 0 :(得分:3)
要从字符串访问单个字符,请使用方括号:
int num = 0;
char r = roman[0];
if (r == 'X') {
num += 10;
}
上述内容绝不是一个完整的例子,但应该足以让你入门。此示例查看字符串roman
中的第一个字符(字符从左侧开始编号,索引为0)。它会检查字符是否为'X'
,如果是,则将num
变量递增10。
答案 1 :(得分:3)
使用您不知道的语言执行此操作的功能,视为伪代码:
int from_roman_numeral(string val) {
val = upper_case(val);
if(val == "N")
return 0;
status neg = False;
if(val[0] == '-') {
neg = True;
val = val[1..];
}
int out = 0;
int last = 0;
int array values = allocate(127);
values['M'] = 1000;
values['D'] = 500;
values['C'] = 100;
values['L'] = 50;
values['X'] = 10;
values['V'] = 5;
values['I'] = 1;
int value;
int next;
for(int idx = 0, int len = strlen(val); idx < len; idx++) {
value = values[val[idx]];
unless(value)
error("'" + val + "' is not a valid Roman numeral sequence");
if(idx < len - 1 && (next = values[val[idx + 1]]) && next > value) {
out += next - value;
idx++;
} else {
out += value;
}
}
return neg ? -out : out;
}