Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами)

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами). используя StringBuilder. Вот так не принимают.

using System;
using System.Text;
namespace OOP3
{
    class Class
    {
        private static void Main(string[] args)
        {

            Console.WriteLine("Введите строку состоящую из слов разделенных пробелами");
            string text = (Console.ReadLine());
            string[] slova = text.Split(' ');
            for (int i = 0; i < slova.Length; i++)
            {
                if (slova[i].Length != 1)
                    Console.Write(slova[i] + " ");
            }
            Console.WriteLine();
        }

    }
}

Так а что происходит?)

Вот задание. Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами). используя StringBuilder. Его нужно сделать с помощью StringBuilder

Не могу понять, как сделать с помощью StringBuilder это задание

:confused: наверно вместо

надо добавлять это в объект StringBuilder.

https://docs.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.append?view=netcore-3.1#System_Text_StringBuilder_Append_System_String_

Сделал вот так сейчас.

using System;
using System.Text;
namespace OOP3
{
    class Class
    {
        private static void Main(string[] args)
        {

            Console.WriteLine("Введите строку состоящую из слов разделенных пробелами");
            string[] words = Console.ReadLine().Split(' ');
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < words.Length; i++)
            {
                if (words[i].Length != 1)
                    Console.Write(words[i] + " ");
            }
            Console.WriteLine();
        }

    }
}

Но не знаю, может нужен Remove для удаления или я ошибаюсь?

Еще бы все знаки препинания пробелами забить или удалить. Или пофиг и так сойдет? В условии они есть )

Remove символы удаляет, тогда надо и слова самому искать в строке вместо Split.

Может быть тут просто хотели чтоб новая строка создавалась через sb (и потом её всю сразу вывести) как я выше говорил.

Да сойдет и так. Просто у меня правильно сделано через StringBuilder?. Препод сказал что изначальный код, не удаляет, а пересоздает. Который отправил со StringBuilder он у меня удаляет или тоже просто пересоздает?

Как сказал препод. Нужно использоваться StringBuilder в этой задаче

Вот я и не могу понять, правильно сделал или нет

Он ничего не делает :slight_smile:
Просто создан неиспользуемый объект, а все остальное осталось так же.

Если надо без пересоздания, то да, Split надо выкинуть, идти по строке и удалять нужные слова через Remove (в данном случае видимо можно искать “одну букву между двумя разделителями”, еще в идеале учесть начало/конец строки).

Раз удалять, то идти проще с конца (sb.Length - 1) до 0, а не наоборот.

Можете помочь сделать? Куда и что написать

А по конкретней куда и что написать)

Ну так думайте, пробуйте на листочке решить, чтобы придумать алгоритм )
Выше примерная идея описана. Надо в цикле проходить строку посимвольно и искать/удалять нужные слова.

Примерно как тут:
https://pas1.ru/deletewords

Или

Тогда не надо i менять в цикле после удалений.


Как работать со строкой через StringBuilder:

Не помогло, но спасибо

Не помогло что?

Выше написано в каком направлении копать и что использовать.

Если вы хотите, чтобы кто-то просто решил задачу за вас, то может быть конечно “повезет” и кто-то где-то это сделает, но это — не эффективный способ обучения. Это ж учебная задача предназначенная для практики при изучении.
Пробуйте что-то сделать, формулировать конкретные вопросы (а во время формулирования может и решение найдется :rubberduck2:).