Loading...
Simooo93 avatar Simooo93 81 Точки

[Homework] Advanced C# - Strings and Text Processing

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

 

Тъй като най-накрая се научих да използвам GitHub реших да дам своите решения на задачите от "стрингове и текстообработка". 

Ето задачите: 

1. Reverse String;

2. String Length;

3. Count Substring Occurences;

4. Text Filter;

5. Unicode Characters

6. Palindromes

7. Letters Change Numbers

Ще съм благодарен, ако дадете някакво ревю за задачите. На 7-ма задача хващам 90 точки в judge-а, явно хвърля exception на първи тест, но не мога да разбера защо. 

Тагове:
3
Fundamentals Module 29/09/2015 14:15:03
Filkolev avatar Filkolev 4482 Точки

На 7-ма сплитваш, но не хващаш случая, когато има спейс в началото или края на стринга. Тримни инпута преди да го сплитнеш.

 

0
IlianStefanov avatar IlianStefanov 12 Точки

Здравей колега и аз използвах това домашно, за да се поупражня с ъплоудване в GitHub

извинявам се, че не съм номерирал задачите, а ето и домашното.

Ако има грешки, които не съм забелязал, може ли да ги обсъдим и същевременно да ги оправим

Благодаря!

2
25/09/2015 01:21:01
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей, Илияне,

Домашното ти е много интересно направено.

За първа задача (Reverse String) аз да си призная дори не знаех че char array може да се печата директно - а и из форуми не съм го виждала досега. Пета задача (Unicode Characters) също е много интересно направена.

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

За четвърта задача (Text Filter) този масив не ти трябва, тъй като всяка от забранените думи я ползваш еднократно. Във C# string.Replace() метода прави замените навсякъде, не само на първия match, който намери.

            //string[] bannedSymbols = new string[wordsToBeBanned.Count()];

В задачата Letters Change Numbers, на този ред string[] inputLine = Console.ReadLine().Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries).ToArray();

.toArray() е излишно, защото ако не парсваш или променяш елементите на колекцията след string.Split(), така или иначе винаги си получаваш string[] като резултат.

А ако изведеш методи, както си направил при други задачи - програмата може да стане с 20 реда по-кратка.

http://pastebin.com/r0bc5Ujf

 

0
IlianStefanov avatar IlianStefanov 12 Точки

Благодаря за feedbacka, ще имам предвид съветите ти. :)

Ще поправя домашното си на базата на твоите предложения.

0
kidroca avatar kidroca 117 Точки

Ето още малко решения

Example

 

0
26/09/2015 15:46:28
cap7ainjack avatar cap7ainjack 20 Точки

На 6-та Palindromes,

трябва да се принтира със space-ве преди "ABBA", както се вижда от примера, твоето е без и моето също е така не знам как се оправя.

Ето го моето решение на 6-та

http://pastebin.com/ddsPuQyQ

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

Започвам да си мисля, че String Builder-a не е най-доброто решение за тази задача или поне аз не знам как да направя това празното място пред "ABBA" да си остане там.

 

Това са всички решения по тази тема:

https://github.com/cap7ainjack/Adv_C-_Homework_3_Strings-and-Text-Processing/tree/master/3_strings_and_text

 

0
27/09/2015 10:14:56
kidroca avatar kidroca 117 Точки

Здравей,

за 6та задача по - важното е да откриеш/извадиш палиндромите.

ползваш StringBuilder по неудобен начин, това което правиш със StringBuilder-a  излишно ти усложняваш работата, защото го правиш на стринг, а после го split-ваш по ' ',  просто си направи един SortedSet<string> palindromes и когато:

 string reversed = StringReverser(array[i]);

прави palindromes.Add(array[i]);

така когато искаш да ги принтираш накрая може да използваш

string result = string.Join(", ", palindromes);

ако искаш да са разделени от повече от един space, може да използваш ",\t" или ",   " вместо ", ".

Истината е че в отговора на домашното space-ът е само един просто в колонката Output текстът е подравнен със Justify, копирай резултатът от Output във един notepad и ще видиш че разтоянието между думите е ", ".

1
27/09/2015 13:07:12
cap7ainjack avatar cap7ainjack 20 Точки

Е добре, така може :D

Мерси отново!

Иначе от мерак да пробвам strign builder-a го напраих така, но ще го махна.

0
vanndann avatar vanndann 1 Точки

 Здравей,

На 4та задача трябва да имаш на предвид и "space"са, защото той ти променя следващата "hidenwords" т.е. става "_Windows", a трябва да е "Windows" . С твоето решение имаш 1 "*" отпред повече след първата ключова дума. Надявам се да си ме разбрал!

Успех!

1
vanndann avatar vanndann 1 Точки

Здравей,

Според мен на трета задача трябва да следиш и за малки и главни букви. Просто добави в началото:

string text = Console.ReadLine().ToLower();
string subtext= Console.ReadLine().ToLower();

Иначе всичко е ОК.

0
IvanAndonov avatar IvanAndonov 5 Точки

Колега, свършил си страхотна работа, но не разбирам защо с Copy-Paste на 4-та задача, същата не работи при мен (не се получава само Replace-a с '*' ). Погледнах да не съм затрил някоя библиотека, но явно не е това...

п.с. Предварително се извинявам за невежеството си :)

0
Simooo93 avatar Simooo93 81 Точки

Здравей, 

 

ами пробвай да я напишеш на ръка, така и без това ще разбереш много по-добре какво се случва. Иначе и на мен ми се е случвало, но не знам защо.

 

Поздрави,

Симо

0
IvanAndonov avatar IvanAndonov 5 Точки

Здравей,

Внушението ти с характер на извод, че не разбирам достатъчно добре кода на решението ("..така и без това ще разбереш много по-добре какво се случва") не е коректно!

От конкретният ти отговор ("..и на мен ми се е случвало, но не знам защо.") изглежда, че си наясно с това, че задачата не е напълно решена, а въпросът ми беше дали можем да стигнем до завършено решение, което да работи във всички случаи ?

Все пак, благодаря за отговора!

Поздрави,

И

0
IvanAndonov avatar IvanAndonov 5 Точки

Ето колега, това трябва да е решението:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TextFilter
{
    class TextFilter
    {
        static void Main(string[] args)
        {
            string[] separator = new string[] { ",", " " };
            string[] bannedWords = Console.ReadLine().Split(separator, StringSplitOptions.RemoveEmptyEntries);

            StringBuilder text = new StringBuilder (Console.ReadLine());
            string[] stars = new string[bannedWords.Length];

            for (int i = 0; i < bannedWords.Length; i++)
            {
                stars[i] = new string('*', bannedWords[i].Length);
                text.Replace(bannedWords[i], stars[i]);
            }
            Console.WriteLine(text);
        }
    }
}

Поздрави,

И

5
bacuty avatar bacuty 55 Точки

https://github.com/VasilenaDragancheva/ExamSolutions

Ето моите решения на задачите от изпитите :) там е и 7ма.

Бих се радвала ако някой му се гледа да ме критикува... Понеже имам нужда от градивна критика за качество на кода :)

1
28/09/2015 16:49:26
kidroca avatar kidroca 117 Точки

Здравей, 

Понеже поръча критика относно качеството на кода, най - ярко впечетление ми направи следното (Става дума за 7ма задача от това домашо "Leters Change Numbers"):

if (letterBefore >= 'A' && letterBefore <= 'Z')
{
    currentSum = number / (-'A' + letterBefore + 1);
}
else if (letterBefore >= 'a' && letterBefore <= 'z')
{
    currentSum = number * (-'a' + letterBefore + 1);
}
if (letterAfter >= 'A' && letterAfter <= 'Z')
{
    currentSum -= (-'A' + letterAfter + 1);
}
else if (letterAfter >= 'a' && letterAfter <= 'z')
{
    currentSum += (-'a' + letterAfter + 1);
}

Няма място между първият и вторият if-else блок и на пръв поглед може да се объркаш че са един блок, за да не се получава така е прието след края на всеки блок (общо взето всичко което има { } - for, if, wile, method etc... ) от код да се оставя по един празен ред освен ако на следващия ред не се пада } - затварящата скоба на по - горен блок. (В случея else if-a е част от if блок-а и между тях не трябва да има място, краят на този блок е затварящата скоба на else if-a })

Следващото нещо е  -'A' + letterBefore + 1 това е равносилно на letterBefore -'A' + 1 , което се чете по - лесно.

Иначе като цяло имената са добре подбрани и лесно се разбира какво става

Отделно от това има някой папки в репозиторито ти които биха се радвали на друго име, като ArraySlider1, BinarySearch1 etc.

вместо "1" там трябва да има думи или две от които da става ясно по - какъв начин това е по различно от ArraySlider или BinarySearch, ако все пак не може да намериш по - подходящо име BinarySearchAlternative е по - добре.

Успех!

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