2016-12-30 77 views
-3

即时阅读问题的C++解决和不明白以下几点:字符串附加罗马数字

  • 在27行似乎大于和小于标志是倒退,但是当我改变他们什么,我想他们应该是程序确实运行。请你能让我知道他们为什么是这样吗?

  • 从第47行开始的字符串函数中,它如何知道要选择哪个字符串?考虑我是否输入了1930年,对于900这个程序知道什么时候知道要超过9个逗号来选择'CM'的下一个字符串,并且同样对于30它知道它需要超过3个逗号并选择'XXX'。 ..但我不确定?能不能请您让我知道它是如何知道使用一年1930

#include <iostream> 
#include <string> 
using namespace std; 


//function prototype 
string toRomanLiterals(int); 

int main() 
//program displays Arabic Years as Roman Years 
{ 
//declare integer as number 
int integernumber; 
//declare a character 
char choice; 

//do while loop to continue by y or no 
do 
{ 
    //do while loop to read integer from user 
    //read integer number between 1 and 3000 only 
    do 
    { 
     cout << "Enter a number between 1000 and 3000: "; 
     cin >> integernumber; 
    } 
    while (integernumber < 1000 || integernumber > 3000); 

    if (integernumber > 1000 || integernumber < 3000) 
    { 
     //calling toRomanLiterals function 
     string output= toRomanLiterals(integernumber); 
     cout << output<<endl; 
    } 
    //continue to ask until user wishes to stop 
    cout << "Would you like to continue? [y/n]" << endl; 
    cin >> choice; 

} 
while (choice != 'n'); 
return 0; 
} 

//string toRomanLitrals takes the integer number and converts to a given 
//number to a Roman number if it is between 1000 and 3000 

string toRomanLiterals(int number) 
{ 
string roman; 
int th,h,t,o; 

//string array for numbers 1 to 9 
string ones[] = 
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 
//string array for numbers 10 to 90 
string tens[] = 
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 
//string array for numbers 100 to 900 
string hundreds[] = 
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 
//string array for numbers 1000 to 3000 
string thousands[] = {"", "M", "MM", "MMM"}; 

if (number <= 3000) 
{ 
    //get number of thousands 
    th = number/1000; 
    number = number % 1000; 

    //get number of hundreds 
    h = number/100; 
    number = number % 100; 

    //get number of tens 
    t = number/10; 
    o = number % 10; 

    //concatenate all string values of thousands, hundreds, tens, zeros 
    //concatenate all symbols 

    roman += thousands[th].append(hundreds[h]) 
      .append(tens[t]).append(ones[o]); 

} 
return roman; 
} 
+1

“backwards”是什么意思?你能正确使用每句话的第一个字母吗?撇号在哪里? –

回答

-1

我的例子来选择“CM” &“XXX”在27行好像大于和小于比标志倒退,但当我改变他们到我认为他们应该是程序运行。请你能让我知道他们为什么是这样吗?

因此该计划将在再次输入请求integernumber,如果输入1000和3000

在字符串函数

之间是不是在47行开始,它是如何知道哪些字符串选择?考虑我是否输入了1930年,对于900这个程序知道什么时候知道要超过9个逗号来选择'CM'的下一个字符串,并且同样对于30它知道它需要超过3个逗号并选择'XXX'。 ..但我不确定?能不能请您让我知道它是如何知道使用一年1930

我的例子对于你的榜样号,1930年选择了“CM” &“XXX”,

th = number/1000; // th gets 1 
number = number % 1000; // number is now 930 

h = number/100; // h gets 9 
number = number % 100; // number is now 30 

t = number/10; // t gets 3 
o = number % 10; // o gets 0 

roman += thousands[th].append(hundreds[h]) 
     .append(tens[t]).append(ones[o]); 
// gets the numerals "M", "CM", "XXX" and "", and appends them together, getting "MCMXXX" 

综上所述,函数从数字中逐个提取数字,然后为它们获取罗马数字,并追加它们,并得到答案。

另外,请不要使用可怕的using namespace std它很可能会导致名称冲突并破坏任何东西。

+0

感谢回顾为我自己的利益,在字符串toRomanLiterals函数中是'th','h','t','o'它指示数组中的数据点使用? – michaelBard

+0

是的。 'th'得到1,因此'千[']''''M'',等等。 –