罗马字到数字的循环问题



有人能帮我找出代码的问题吗?

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main(){
ifstream roman("C:/OT2015/Rimski.txt");
ofstream arabic("C:/OT2015/Arapski.txt");
string line;
int sum = 0;
int count = 0;
getline( roman,line);
int numbers[line.length()] = {0};
for(int i = 0; i < line.length(); i++){
if(line[i] == 'I'){
numbers[i] = 1;
}
if(line[i] == 'V'){
numbers[i] = 5;
}        
if(line[i] == 'X'){
numbers[i] = 10;
}
if(line[i] == 'L'){
numbers[i] = 50;
}
if(line[i] == 'C'){
numbers[i] = 100;
}
if(line[i] == 'D'){
numbers[i] = 500;
}
if(line[i] == 'M'){
numbers[i] = 1000;
}
count++;
}
for(int i = 0; i < count; i++){
if(numbers[i] >= numbers[i+1]){
sum = sum + numbers[i];
}
else{
sum = sum - numbers[i];
}
}
cout << sum;
arabic << sum;
}

问题出在最后一个for循环上,它把数字加起来不正确。当我使用调试器时,它会失控,并将我的断点放错地方。它也会跳过第一个条件if,直接跳到else,加起来会达到-10。我修复了它,但它仍然输出数字-10。

我测试的罗马数字:LXXIV正确输出:74我的输出(不正确(:-10

请帮助

当我添加george的评论时,我添加了另一个if循环,它起到了的作用

#include <iostream>
#include <string>
using namespace std;
int main(){
ifstream  roman("C:/OT2015/Rimski.txt");
ofstream arabic("C:/OT2015/Arapski.txt");
string line;
int sum = 0;
int count = 0;
getline( roman,line);
int numbers[line.length()] = {0};
for(int i = 0; i < line.length(); i++){
if(line[i] == 'I'){
numbers[i] = 1;
}
if(line[i] == 'V'){
numbers[i] = 5;
}        
if(line[i] == 'X'){
numbers[i] = 10;
}
if(line[i] == 'L'){
numbers[i] = 50;
}
if(line[i] == 'C'){
numbers[i] = 100;
}
if(line[i] == 'D'){
numbers[i] = 500;
}
if(line[i] == 'M'){
numbers[i] = 1000;
}
count++;
}
for(int i = 0; i < count; i++){
if(i != count - 1){ 
if(numbers[i] >= numbers[i+1]){
sum = sum + numbers[i];
}
else{
sum = sum - numbers[i];
}
}
else{
sum = sum + numbers[i];
}

}
cout << sum;
arabic << sum;


只需等待2天即可标记为答案

最新更新