Loading...
mario2s avatar mario2s 19 Точки

[Homework] C# Basics - Conditional-Statements - Problem{11} - Number as Words

Здравейте!

Като цяло задачата ми е готова, но остана един малък козметичен елемент.

Когато числото е двуцифрено или едноцифрено в дадените примерни резултати, дори тогава текста започва с главна буква. При мен това става само при трицифрените.

Дали някой би могъл да ми предложи някакъв рентабилен начин да оправя и тази козметична подробност?

ModEdit: Цитирането на повече от 12-15 реда код е забранено според правилата на форума, моля използвайте pastebin.com или подобна платформа.

Тагове:
2
Programming Basics 26/07/2015 19:56:08
DHristoskov avatar DHristoskov 211 Точки

Решавал съм задачката преди доста време, не помня дали работеше коректно, но мисля че нямаше проблеми и е доста по кратка от твоето решение

Задача

Успех!!!

2
mario2s avatar mario2s 19 Точки

Мерси! Доста по-кратко, но мисля, че пак няма отговор на козметичния проблем с главните букви, ако няма стотици.

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Марио,

Това което искаш може да стане - с тернарен оператор:

например тук:

            switch (dig2)
            {
                case 0:
                    Console.Write("");
                    break;
                case 1:
                    switch (dig1)
                    {
                        case 0:
                            string asWord = "ten";
                            Console.Write("{0} ", dig3 == 0 ? "Ten" : "ten");

Може да оптимизираш и още два детайла ако решиш:

* в момента това if (Num < 999 || Num >= 0) допуска и 10-цифрени числа, за да приема само числа между 0 и 999, трябва да стане с AND:  if (Num < 999 && Num >= 0)

* и това if (dig2 != 0 && dig3 != 0) трябва да остане if (dig3 != 0), защото при two hundred and four, dig2=0, но пак ти трябва "and".

Решението ти е интересно. Друг път само си пействай кода в http://pastebin.com/ - не дават дълъг код във форум постове според правилника на форума.

1
mario2s avatar mario2s 19 Точки

Благодаря!

Това решение се списва отлично в подхода ми.

"* в момента това if (Num < 999 || Num >= 0) допуска и 10-цифрени числа, за да приема само числа между 0 и 999, трябва да стане с AND:  if (Num < 999 && Num >= 0)" - Тук да си призная съм заспал буквално. Но всъщност и това "if (Num < 999 && Num >= 0)" не е коректно, защото изпуска 999 - ето така го направих сега "if (Num <= 999 && Num >= 0)".

За втората поправка ми е трябвало повече QA или опит за бързо намиране на такива грешки - Good catch, thanks!

Ето го и поправения код: http://pastebin.com/rSzcg1vR

Само не разбрах тази част " string asWord = "ten";" за какво е? Аз минавам и без нея, но все пак ми е интересно.

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Абсолютно си прав Марио, това string asWord = "ten" не ти трябва.

Забравила съм го в кода, защото смятах първо да ти предложа друг вариант:

                // Console.Write("{0} ", dig3 == 0 ? "Ten" : "ten");
                string asWord = "ten";
                Console.Write("{0} ", dig3 == 0 ? UppercaseFirst(asWord) : asWord);   

Използва този метод:

    static string UppercaseFirst(string s)
    {
          return char.ToUpper(s[0]) + s.Substring(1);
    }

Но става по-дълго. Има смисъл само ако ще обработваме повече стрингове, и ако ще ги подаваме по-лесно на метода - в твоя случай само с тернарен оператор е по-кратко - ето го все пак и в код: http://pastebin.com/eTQVEqDg

0
mario2s avatar mario2s 19 Точки

Аааа така има смисъл. Аз тъкмо търсех дали има някаква функция за Uppercase и как се прилага. Много ти благодаря Катя!

1
tilchev92 avatar tilchev92 Trainer 128 Точки

ако ползваш StringBuilder за да държиш крайния отговор може да направиш нещо такова:

result[0] = (char) (result[0] - 32);
string output = result.ToString();
 
 
и стара тема в която има доста варианти за тази задача
0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.