Exercises: Strings, Dictionaries, Lambda and LINQ: 3.Censor Your Email Address
Здравейте,
Как направихте "Create the replacement string by duplicating the '*' character username.Length and appending '@' and the domain." ?
Благодаря Ви предварително.
Здравейте,
Как направихте "Create the replacement string by duplicating the '*' character username.Length and appending '@' and the domain." ?
Благодаря Ви предварително.
Ето линк с решението: 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: Извинявам се за имената на променливите в примерното ми решение - всичко се дължи на факта, че съм страшно мързелив...
А някой сеща ли се защо следният код гърми при третата проверка на 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-а дава ли пълните точки там? Може би пропускам нещо друго?
massbless, направи съпоставка между твоя вариант и моя вариант с e-mail: ivan@ivanivanov.bg
Твоята програма ще върне: ****@********ov.bg
Моята програма ще върне: ****@ivanivanov.bg
Надявам се, че с това отговарям на въпроса ти кое е различно в програмите. Ако проследиш внимателно кода, ще видиш откъде идва тази разлика. Относно решението ми - щом съм го публикувал като отговор на въпрос, значи е изкарало 100/100 точки в Judge. Желая ти успех със задачата.
Хмм, дори за момент не ми мина през ума, че името на потребителя може да се съдържа в името на домейна.
И което е по-притеснително - доколкото се познавам, надали щях и да се сетя.
Мерси за подсказката!
Остава "само" да открия начин да накарам мозъка си да спре да discard-ва варианти, просто защото звучат нелогично (а са напълно възможни) - започва да се превръща в сериозен проблем в настоящия курс...
Мерси за отговора! Не знаех как да направя подчертаната част по долу :)
string replacement = new string('*', b[0].Length) + "@" + b[1];
Много елегантно решение. Поиграх си да го напиша със списък, вместо масив, за тренировка, което пак е същото. Trim не е нужна и се учудих, че я ползваш, след като казваш, че си мързелив :) :