Loading...
Bogdan1899 avatar Bogdan1899 50 Точки

[Homework] Advancetd C# - String And Text Processing - Problem {7*} - Letters change numbers

Здравейте, колеги!

опитвам се да реша посочената в заглавието задача, като примерите в домашното ги минава, но тези в judge-a не. Ще съм благодарен, ако успеете да намерите грешките.

http://pastebin.com/XLrF45nC 

Идеята ми е следната: Правя един for цикъл, с който обхождам масива от стрингове. След това взимам първия string и правя четири конструкции if , с които обхващам възможните комбинации от големи и малки букви. Във всеки един от if циклите взимам числото между буквите със Sustring, след което го парствам.

Тагове:
-1
Fundamentals Module 29/09/2015 12:30:51
kidroca avatar kidroca 117 Точки

Здравей,

Начинът по който split-ваш входните данни не премахва празните пространства от string-ът (ако има такива), примерно ако си пуснеш debugger-a  и въведеш "P34562Z q2576f   H456z" (от тестовете от заданието на домашното) може да видиш че съдържанието на input ти е { "P34562Z", "q2576f", "", "",  "H456z" }, следователно когато цикълът ти стигне до input[2] гърми защото е празен string

Това може да го оправиш като използваш Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)

Edit: По - добре дори да използваш Split(new string[] { " ", "\n", "\t" }, StringSplitOptions.RemoveEmptyEntries), защото по - горният случей не покрива данни които са разделени със "\n" - нов ред

Това за съжеление само по себе си не оправя нещата

Тук:

if ((arrElement[0] >= 65 && arrElement[0] <= 90) && (arrElement[arrElement.Length - 1] >= 65 && arrElement[arrElement.Length - 1] <= 90))

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

Edit: Сега като разгледах отново видях че просто се опитваш да направиш нещата на веднъж, просто ги направи по отделно, едно че като е наведнъж си усложнаваш работата, друго че поотделно кода изненадващо е по - кратък и не на последно място на веднъж в случея не е по - бързо.

Раздели си проверката така:

Провери дали първата буква е главна или не и изпълни условието в съответния случей 

След това провери последната буква и изпълни условието за нейния случей.

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

for (int i = 0; i < input.Length; i++)
        {
            string arrElement = input[i].ToString();

            char firstLetter = arrElement[0];
            char lastLetter = arrElement[arrElement.Length - 1];

            decimal number = 
                decimal.Parse(arrElement.Substring(1, arrElement.Length - 2));

            decimal firstUpper = firstLetter - 64;
            decimal firstLower = firstLetter - 96;

            decimal lastUpper = lastLetter - 64;
            decimal lastLower = lastLetter - 96;

            // If firsLetter is Upper: number = number / firstUpper
            // else: number = number * firstLower

            // If lastLetter is Upper: number = number - lastUpper
            // else: number = number + lastLower

            // sum += number 

Оставил съм ти сам да си имплементираш логиката на проверките...

А, ако не успееш ето какво остана от кода ти след като го преогранизирах, проблемът е бил във някой от if конструкциите

2
28/09/2015 23:24:18
Bogdan1899 avatar Bogdan1899 50 Точки

Благодаря за изчерпателния и коректен отговор, колега.

Поздрави!

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.