我目前正在爲它的樂趣寫一個羅馬數字轉換器。該問題符合前述的字符優先順序。由於羅馬數字不是位置的,即III不代表1 *任何基數^ 2 + 1 *任何基數^ 1 + 1 *任何基數^ 0。需要在字符串中格式化字符優先級
當然,當有人在XIV中鍵入內容時,我很難確定在這種情況下我沒有被添加,而是被扣除。我不知道如何做到這一點。解決這個問題的最好方法是什麼?
我都存儲在陣列中的羅馬符號和它們各自的十進制數:
const char cRomanArray[] = "IVXLCDM";
const int romanArray[] = { 1, 5, 10, 50, 100, 500, 1000 };
所以它不會太難,只需檢查中的優先級對我來說,暴力破解這該死的東西數組,即如果符號小於下一個符號,即在'XIV'中如果'I'小於'V',在這種情況下,這是因爲我已經在數組中排序它們,然後我可以使它會減去值而不是添加。
但這似乎是一個非常醜陋的解決方案。有沒有更好的?我正在考慮沿着正則表達式的方向行事(原諒我,如果這聽起來像一個可怕的想法,我還沒有使用RegExp,但它聽起來像它可以做我需要的東西,那就是確定字符串中的字符)
閱讀I&V並將它們轉換爲1-9不適用於IX,是嗎? – Gauthier 2010-04-03 08:43:41
糟糕,是的你是對的。我想你可以從右邊讀,直到它不符合模式,但我的第一個建議是迄今爲止最簡單的代碼。 – 2010-04-03 09:11:50