文字列の参照について
Posted: 2010年6月18日(金) 17:13
初めまして。一難民と申します。
私は今、配列の文字列を参照してローマ数字をアラビア数字に変換するプログラムを、
emac(Finderバージョン10.3.3)付属のXcode(バージョン1.5)を用いて作っています。
大体の面においてはうまくいくのですが、一カ所'L'についての配列でおかしな症状がでています。
1,本来+5されるべき場所がなぜか+10される
2,四桁目以降何もない場合なぜかそこでもう一度+10される
という症状がでています。
皆さんからみれば簡単なことと思いますが、どうかよろしくお願いします。
コード
#include <stdio.h>
int main (int argc, const char * argv[/url]) {
int o,t,h,th,m;
char r[100];
o=0;
t=0;
h=0;
th=0;
printf("入力してください ");
scanf("%99s",&r);
for(m=0;m<100;m++){
if(r[m-1]=='C' && r[m]=='M'){
h=h+9;
}
if(r[m-1]!='C' && r[m]=='M'){
th=th+1;
}
if(r[m-1]=='C' && r[m]=='D'){
h=h+4;
}
if(r[m-1]!='C' && r[m]=='D'){
h=h+5;
}
if(r[m-1]=='X' && r[m]=='C'){
t=t+9;
}
if(r[m]=='C' && r[m+1]=='D'){
}
if(r[m-1]!='X' && r[m+1]!='M' && r[m]=='C' && r[m+1]!='D'){
h=h+1;
}
if(r[m-1]=='X' && r[m]=='L'){
t=t+4;
}
if(r[m-1]!='X' && r[m]=='L'){
t=t+5;
}
if(r[m]=='X' && r[m+1]=='C'){
}
if(r[m]=='X' && r[m+1]=='L'){
}
if(r[m-1]=='I' && r[m]=='X'){
o=o+9;
}
if(r[m+1]!='C' && r[m+1]!='L' && r[m-1]!='I' && r[m]=='X'){
t=t+1;
}
if(r[m-1]=='I' && r[m]=='V'){
o=o+4;
}
if(r[m-1]!='X' && r[m]=='L'){
t=t+5;
}
if(r[m]=='I' && r[m+1]=='X'){
}
if(r[m]=='I' && r[m+1]=='V'){
}
if(r[m+1]!='V' && r[m+1]!='X' && r[m]=='I'){
o=o+1;
}
if(r[m]=0){
m=m+1000;
}
printf("%d%d%d%d\n",th,h,t,o);
}
printf("%d%d%d%d",th,h,t,o);
return 0;
}
私は今、配列の文字列を参照してローマ数字をアラビア数字に変換するプログラムを、
emac(Finderバージョン10.3.3)付属のXcode(バージョン1.5)を用いて作っています。
大体の面においてはうまくいくのですが、一カ所'L'についての配列でおかしな症状がでています。
1,本来+5されるべき場所がなぜか+10される
2,四桁目以降何もない場合なぜかそこでもう一度+10される
という症状がでています。
皆さんからみれば簡単なことと思いますが、どうかよろしくお願いします。
コード
#include <stdio.h>
int main (int argc, const char * argv[/url]) {
int o,t,h,th,m;
char r[100];
o=0;
t=0;
h=0;
th=0;
printf("入力してください ");
scanf("%99s",&r);
for(m=0;m<100;m++){
if(r[m-1]=='C' && r[m]=='M'){
h=h+9;
}
if(r[m-1]!='C' && r[m]=='M'){
th=th+1;
}
if(r[m-1]=='C' && r[m]=='D'){
h=h+4;
}
if(r[m-1]!='C' && r[m]=='D'){
h=h+5;
}
if(r[m-1]=='X' && r[m]=='C'){
t=t+9;
}
if(r[m]=='C' && r[m+1]=='D'){
}
if(r[m-1]!='X' && r[m+1]!='M' && r[m]=='C' && r[m+1]!='D'){
h=h+1;
}
if(r[m-1]=='X' && r[m]=='L'){
t=t+4;
}
if(r[m-1]!='X' && r[m]=='L'){
t=t+5;
}
if(r[m]=='X' && r[m+1]=='C'){
}
if(r[m]=='X' && r[m+1]=='L'){
}
if(r[m-1]=='I' && r[m]=='X'){
o=o+9;
}
if(r[m+1]!='C' && r[m+1]!='L' && r[m-1]!='I' && r[m]=='X'){
t=t+1;
}
if(r[m-1]=='I' && r[m]=='V'){
o=o+4;
}
if(r[m-1]!='X' && r[m]=='L'){
t=t+5;
}
if(r[m]=='I' && r[m+1]=='X'){
}
if(r[m]=='I' && r[m+1]=='V'){
}
if(r[m+1]!='V' && r[m+1]!='X' && r[m]=='I'){
o=o+1;
}
if(r[m]=0){
m=m+1000;
}
printf("%d%d%d%d\n",th,h,t,o);
}
printf("%d%d%d%d",th,h,t,o);
return 0;
}