Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

KrasimirPetkov avatar KrasimirPetkov 328 Точки
Best Answer

Ето линк с решението: http://pastebin.com/WzjQiwUk

В случая трябва да разделиш string-a на username и domain, а после да цензурираш username-a и да ги събереш отново, за да ги използваш за подмяна в даден текст.

Ако вземем за пример: ivan@ivanivanov.bg се разделя на username: ivan и domain: ivanivanov.bg.

Разделяме ги спрямо "@".

Append е просто операция, при която ги събираш в едно цяло:

string <име на променлива> = username + "@" + domain (като цензурираш username-a).

После с Replace() сменяме всеки e-mail и сме готови :)

 

Идеята е, че като съберем целия e-mail адрес в едно цяло, се подсигуряваме, че подменяме само него във въведената информация. Иначе някоя част от username-a може да се препокрива във въведения текст или в името на domain-а.

 

PS: Извинявам се за имената на променливите в примерното ми решение - всичко се дължи на факта, че съм страшно мързелив...

5
07/06/2016 03:15:23
Martotko avatar Martotko 88 Точки

Мерси за отговора! Не знаех как да направя подчертаната част по долу :)

 string replacement = new string('*', b[0].Length) + "@" + b[1];

2
07/06/2016 03:21:30
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Много елегантно решение. Поиграх си да го напиша със списък, вместо масив, за тренировка, което пак е същото. Trim не е нужна и се учудих, че я ползваш, след като казваш, че си мързелив :) :

 

string email = Console.ReadLine();
            List<string> toReplace = email.Split('@').ToList();
            string replacement = new string('*', toReplace[0].Length) + '@' + toReplace[1];
            string text = Console.ReadLine();
            text = text.Replace(email, replacement);
            Console.WriteLine(text);

 

1
massbless avatar massbless 5 Точки

А някой сеща ли се защо следният код гърми при третата проверка на Judge-а?

static void Main()
    {
        string email = Console.ReadLine().Trim();
        string input = Console.ReadLine();

        int splitter = email.IndexOf("@");
        string stars = new string('*', splitter);
        string name = email.Substring(0, splitter);
        string censoredEmail = email.Replace(name, stars);
        string result = input.Replace(email, censoredEmail);

        Console.WriteLine(result);
    }

Изглежда доволно просто... Единственият проблемен сценарии, за който се сещам, е ако примерно адресът е "ivan.petrov@abv.bg", а в текста се среща "divan.petrov@abv.bg", което би се заменило с "d***********@abv.bg" (за което условието на задачата не казва нищо). Решението на KrasimirPetkov по-нагоре ми се струва, че би върнало същия output. Judge-а дава ли пълните точки там? Може би пропускам нещо друго?

0
12/06/2016 21:31:55
KrasimirPetkov avatar KrasimirPetkov 328 Точки

massbless, направи съпоставка между твоя вариант и моя вариант с e-mail: ivan@ivanivanov.bg

 

Твоята програма ще върне: ****@********ov.bg

Моята програма ще върне: ****@ivanivanov.bg

 

Надявам се, че с това отговарям на въпроса ти кое е различно в програмите. Ако проследиш внимателно кода, ще видиш откъде идва тази разлика. Относно решението ми - щом съм го публикувал като отговор на въпрос, значи е изкарало 100/100 точки в Judge. Желая ти успех със задачата.

1
12/06/2016 22:19:42
massbless avatar massbless 5 Точки

Хмм, дори за момент не ми мина през ума, че името на потребителя може да се съдържа в името на домейна.

И което е по-притеснително - доколкото се познавам, надали щях и да се сетя.

Мерси за подсказката!

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

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