计蒜课_罗马数字转换为整数
思路总结:这道题重点在于对罗马数字规则的把握,熟悉了罗马数字的规则以后,实现主要思路是
1、输入的罗马数字字符串str;
2、一个字符数组C,在代码中给出c;
在给定的字符数组C中,不断地判断C的当前元素是否为str的前缀,即分别确定str所代表数字的千位,百位,十位,个位:
实现代码如下:
1 int getLength(const char*str) {//获取字符串的长度; 2 int length_of_str; 3 for (length_of_str = 0;str[length_of_str] != '\0';length_of_str++); 4 return length_of_str; 5 } 6 bool is_prefix(const char*str1,const char*str2) {//判断str1是否为str2的前缀; 7 int length_of_str1 = getLength(str1); 8 int length_of_str2 = getLength(str2); 9 if (length_of_str1 > length_of_str2) 10 return false; 11 for (int i = 0;i < length_of_str1;i++) { 12 if (str1[i] != str2[i]) { 13 return false; 14 } 15 } 16 return true; 17 } 18 int RomanToInt(const char*str) {//主要实现函数; 19 char*c[4][10] = { 20 {"","I","II","III","IV","V","VI","VII","VIII","IX"},//1~9; 21 {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},//10~90; 22 {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},//100~900; 23 {"","M","MM","MMM"},//1000~3000; 24 }; 25 int result = 0;//存放结果; 26 int length_of_str = getLength(str);//获取待转换为罗马数字的字符串的长度; 27 int currentrow=3;//初始位置的列数; 28 int currentcolumn=3;//初始位置的行数; 29 int current_length; 30 while((currentrow>=0)&&(str[0] != '\0')){ 31 current_length = getLength(c[currentrow][currentcolumn]); 32 if (is_prefix(c[currentrow][currentcolumn],str)) { 33 result = result*10+currentcolumn;//更新result; 34 currentrow--; 35 currentcolumn = 9; 36 str += current_length;//若对字符串的前缀判断成功,则将字符串str的指针右移相应长度; 37 } 38 else { 39 if (--currentcolumn == 0) { 40 currentrow--; 41 currentcolumn = 9; 42 } 43 } 44 45 } 46 return result; 47 }