Я не можу зрозуміти, як вирішити задачу: C#Beginner6 task: Exam task Create a Dictionary
Чи можна вирішувати такім способом? Якщо так, то яка умова має бути, щоб позбавитись переходу на нову строку на самому початку перед першим словом? Дякую:)
using System;
namespace Exam
{
class DivideString
{
static void Main()
{
string input = Console.ReadLine();
for (int i =0; i<input.Length; i++)
{
if (char.IsLetter(input[i]))
{
Console.Write(input[i]);
}
else if (((input[i] == ’ ') || (input[i] == ‘,’) || (input[i] == ‘.’) || (input[i] == ‘?’) || (input[i] == ‘!’)) && (char.IsLetter(input[i + 1])) && (i < input.Length - 1))
{
Console.WriteLine();
}
}
}
}
}
У цьому розв’язку задачі відображення починається з перенесення ( Console.WriteLine();
), бо компілятор бачить другий знак питання як true
.
Так, в тому і є моє питання, яку умову застосувати, щоб воно не спрацьовувало на початку, і разом із тим спрацьовувало всередині. 5 годин думала і вирішила тільки те, що треба порадитись.
Можна додати умову if(i > 0)
. Тоді не буде відпрацьовувати на початку.
Це підходить, чи не відповіла?
дякую, Maria:) Справа в тому, що за моєю умовою треба робтити перехід на іншу строку якщо поточний char -це один з символів ! . , ? , а наступний char IsLetter. Якщо перший Letter починаєтся після деякої кількісті символів ! . , ? , то спрацьовує Console.WriteLine(); і у консолі це стрибок вниз, хоча індекс може бути вже і більшим за 0.
Наприклад:
input: ??Wow!!
output:
(ось це місце, де працює індекс 1)
Wow
Тому i>0 не підійде, нажаль(
&& (char.IsLetter(input[i + 1])) && (i < input.Length - 1))
у цій частині коду надзвичайно велику роль грає порядок перевірки. Спершу код пробує взяти елемент на одиничку більше і лише потім перевіряє її значення. Нам же треба спершу переконатися, що (i < input.Length - 1)
. Тож зміна перевірок місцями:
&& (i < input.Length - 1) && (char.IsLetter(input[i + 1])) )
вирішить проблему
Дякую, спрацювало=) Виходить баг був у іншому місці, я думала, що на початку не має бути стрибка вниз, але з ним пропускає.
1 Like