안녕하세요 저는 로마 숫자를 C++에서 일반 숫자로 변환하는 데 문제가 있습니다. 숫자는 숫자 (XIV 14 또는 LIV 등)를 입력하면 코드가 작동하지만 15 또는 55를 넣으십시오. find 문을 구현하려고했지만 실제로 문제를 해결하는 데 사용 방법을 모르겠습니다. 여기에 지금까지 내 코드 사본이 있습니다. 누군가가 내가 초보자와 C의 양을 코딩을 오전으로는 크게 이해할 수있을 것이다이 나를 도울 수 있다면C++에서 find 문을 사용하여 로마 숫자를 숫자로 변환
int convNum;
int total = 0;
string romanNum;
const string units [10]= {"0","I","II","III","IV","V","VI","VII","VIII","IX"};
const string tens [10]= {"0","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
const string hundreds [10]= {"0","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
const string thousands [4]= {"0","M","MM","MMM"};
string input;
while(!cin.eof()){
cin>>romanNum;
if(cin.fail()){
break;
}else{
for(int i=0; i<romanNum.length(); i++){
romanNum[i]=toupper(romanNum[i]);
}
for(int y=3; y > 0; y--){
if(romanNum.find(thousands[y])!= string::npos){
total += y*1000;
input.erase(0,thousands[y].length());
break;
}
}
for(int y=9; y > 0; y--){
if(romanNum.find(hundreds[y])!= string::npos){
total += y*100;
input.erase(0,hundreds[y].length());
break;
}
}
for(int y=9; y > 0; y--){
if(romanNum.find(tens[y])!= string::npos){
total += y*10;
input.erase(0,tens[y].length());
break;
}
}
for(int y=9; y > 0; y--){
if(romanNum.find(units[y])!= string::npos){
total += y;
input.erase(0,units[y].length());
break;
}
}
cout << total << endl;
total = 0;
}
for(int k=0; k < romanNum.length(); k++){
input[k] = romanNum[k];
}
}
return 0;
}
는 ++ 코드는 코드 주위에 이주 날 데려 갔어. 당신이 발견 한 숫자를 삭제하는 경우, 당신은 input
문자열 아닌 romanNum
문자열에서 삭제된다
첫째 : 당신이 두 가지 문제를 가지고있는 것처럼
Woah, 2 주?! : O – Doorknob
다른 기술을 사용하여 이것을 구현할 수 있습니까? 나에게있어 가장 먼저 떠오르는 것은 상태 머신이다. –
아니요, 그렇게 생각하지 않아요. (미안 해요. 상태 머신이 무엇인지 전혀 모르겠군요.) – Brenton