Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 06.11.2019
Сообщений: 134

Удалить из строки слов все однобуквенные слова

08.12.2019, 22:51. Показов 4187. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения
разделяются пробелами и знаками препинания. Задание: удалите из сообщения все однобуквенные слова.
Не смог найти даже методы, как разделить строки на подстроки разделённые пробелами. Можете помочь составить программу?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2019, 22:51
Ответы с готовыми решениями:

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

Удалить все однобуквенные слова с лишними пробелами
6. Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами).

Файл: Удалить из файла все однобуквенные слова.
Удалить из файла все однобуквенные слова.

28
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
08.12.2019, 23:55
Nikita_21,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Text.RegularExpressions;
 
public class Example
{
    public static void Main()
    {
        string pattern = @"(?:\b|\s)[[:alpha:]](?:\s|\b)";
        string substitution = @" ";
        string input = @"Я Здравствуйте.
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения
разделяются пробелами и. знаками препинания. Задание: удалите из сообщения все однобуквенные слова.
Не смог найти даже методы, как разделить строки на подстроки разделённые пробелами. Можете помочь составить программу?";
        RegexOptions options = RegexOptions.CultureInvariant;
        
        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}
1
 Аватар для Voronkin
469 / 296 / 166
Регистрация: 18.03.2018
Сообщений: 960
09.12.2019, 00:13
C#
1
2
3
4
5
6
7
8
9
10
11
Console.WriteLine("Введите строку");
string str = Console.ReadLine(); //исходная строка
string[] startString = str.Split(new Char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
string finishString ="";
for (int i = 0; i < startString.Length; i++) //перебираем слова в строке
   {
      //записываем слова по очереди в новую строку
      //если слово из 1 символа - пропускаем
      if (startString[i].Length > 1) finishString += " "+startString[i] ;
   }
Console.WriteLine(finishString); //выводим получившуюся строку
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 13:20
Nikita_21, немного доработанный код от Voronkin
C#
1
2
3
4
5
6
Console.WriteLine("Введите строку");
string str = Console.ReadLine(); //исходная строка
string[] startString = str.Split(new Char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
string finishString =string.Join(" ", startString.Where (w => w.Length > 1));
 
Console.WriteLine(finishString); //выводим получившуюся строку
1
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.12.2019, 15:49
Элд Хасп,
Цитата Сообщение от Nikita_21 Посмотреть сообщение
Слова сообщения
разделяются пробелами и знаками препинания.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 16:20
Diamante, я толком задание даже не читал...
Только код чуть подкорректировал.
Оплошность - надо переделать.
1
 Аватар для Voronkin
469 / 296 / 166
Регистрация: 18.03.2018
Сообщений: 960
09.12.2019, 16:36
Цитата Сообщение от Элд Хасп Посмотреть сообщение
new Char[] {' '}
заменить на
C#
1
new Сhar[] {' ', '.', ',', '!', '?', '»', '«'};
Теперь, вроде бы, правильно
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.12.2019, 16:50
Voronkin, а теперь собери строку обратно, не потеряв знаки препинания
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 16:52
Voronkin, не совсем.
Если список разделителей не оговорен в задаче, то надо разделителем считать любой символ для которого IsSeparator(Char) возвращает true.
0
 Аватар для Voronkin
469 / 296 / 166
Регистрация: 18.03.2018
Сообщений: 960
09.12.2019, 16:53
Цитата Сообщение от Diamante Посмотреть сообщение
Voronkin, а теперь собери строку обратно, не потеряв знаки препинания
Тогда первый вариант верный. Или я что-то не догоняю)))) Поясните это

Цитата Сообщение от Diamante Посмотреть сообщение
Элд Хасп,
Сообщение от Nikita_21
Слова сообщения
разделяются пробелами и знаками препинания.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 17:22
Возможно и проверка на IsPunctuation(Char) нужна.
Я не помню уже.

Добавлено через 10 минут
Цитата Сообщение от Voronkin
Тогда первый вариант верный
Вы знаете такое выражение "Горе от ума".
Когда излишне много знаешь - не знаешь на чём остановиться.

В задаче сказано "разделяются пробелами и знаками препинания", но не дан их перечень.
Может быть в методичке с задачей, где-то ранее задаётся этот список.
Если нет, то список разделителей это
Цитата из документацииРазделители пробелов ( UnicodeCategory.SpaceSeparator категория), включая такие символы, как \u0020.
Разделители строк (категория UnicodeCategory.LineSeparator ), в том числе \u2028.
Разделители абзацев ( UnicodeCategory.ParagraphSeparator категория), в том числе \u2029

Плюс к ним список знаков препинания
Цитата из документацииДопустимые знаки пунктуации являются членами следующих категорий в UnicodeCategory: ConnectorPunctuation InitialQuotePunctuation ClosePunctuation DashPunctuation OpenPunctuation OtherPunctuation,,,,, или. FinalQuotePunctuation
.

Дополнительные сложности накладывает "удалите из сообщения все однобуквенные слова". То есть об удалении или замене пробелов и разделителей не сказано. Значит из надо сохранить.

Поэтому в полной мере ни одни вариант не даёт решения задачи.
Но может я излишнее усложняю.
0
 Аватар для Voronkin
469 / 296 / 166
Регистрация: 18.03.2018
Сообщений: 960
09.12.2019, 17:36
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поэтому в полной мере ни одни вариант не даёт решения задачи.
Но может я излишнее усложняю.
Скорее всего.
Согласен с недостачей условий, но исходя из данного:
Цитата Сообщение от Nikita_21 Посмотреть сообщение
Дана строка, в которой содержится осмысленное текстовое сообщение.
- подразумевает некий массив слов. в конце некоторых слов находятся знаки препинания, но все слова разделены пробелами (согласно правилам орфографии)

Цитата Сообщение от Nikita_21 Посмотреть сообщение
Задание: удалите из сообщения все однобуквенные слова.
Задача выполнена в полной мере . Дополнительных условий нет, да и не может быть их, так как после операции осмысленность текста скорее всего потеряется, как и надобность в знаках препинания

Поэтому, скорее всего правильный - любой из вариантов кода, на усмотрение автора)))
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.12.2019, 17:40
Элд Хасп, Voronkin, можно гораздо проще
C#
1
2
3
4
5
6
7
8
9
10
11
12
        var str = @"Я, Здравствуйте.
Дана строка, в! которой содержится осмысленное текстовое сообщение. Слова сообщения
разделяются пробелами и. знаками препинания. Задание: удалите из сообщения все однобуквенные слова.
Не смог найти даже методы, как разделить строки на подстроки разделённые пробелами. Можете помочь составить программу?";
        var tempStr = " " + str + " ";
        var sb = new StringBuilder();
        for (int i = 1; i < tempStr.Length - 1; i++)
        {
            if (!char.IsLetter(tempStr[i - 1]) && char.IsLetter(tempStr[i]) && !char.IsLetter(tempStr[i + 1])) continue;
            sb.Append(tempStr[i]);
        }
        Console.WriteLine(sb.ToString());
ну и регулярки, куда ж без них
C#
1
2
3
4
5
6
        var str = @"Я, Здравствуйте.
Дана строка, в! которой содержится осмысленное текстовое сообщение. Слова сообщения
разделяются пробелами и. знаками препинания. Задание: удалите из сообщения все однобуквенные слова.
Не смог найти даже методы, как разделить строки на подстроки разделённые пробелами. Можете помочь составить программу?";
        var result = Regex.Replace(str, @"\b[а-яё]\b", "", RegexOptions.IgnoreCase);
        Console.WriteLine(result);
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 17:48
Diamante, про удаление цифр ничего сказано не было!
Что вернёт ваш код из строки "С Новым 2020 г.!" ?

Добавлено через 2 минуты
Voronkin, прогоните через методы вышеуказанную строку.
Правильный результат " Новым 2020 .!"
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.12.2019, 17:49
Элд Хасп, " Новым 2020 .!"
" Новым 2020 .!"
оба варианта, как ни странно
0
 Аватар для Voronkin
469 / 296 / 166
Регистрация: 18.03.2018
Сообщений: 960
09.12.2019, 17:52
Цитата Сообщение от Элд Хасп Посмотреть сообщение
" Новым 2020 .!"
Ну. все четко))) Однобуквенные слова удалены)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 17:58
Diamante, действительно странно.
Всегда считал, что для цифр IsLetter вернёт ложь.
Упущение...

Добавлено через 2 минуты
А нет!
Я неправильно понял логику метода.
Попробуйте такую строку "x1 + x2 = 23".

Добавлено через 26 секунд
Строка не должна измениться.

Добавлено через 2 минуты
Voronkin, это в методах Diamante.
А я за те что выше.
Методы Diamante не справятся с "x1 + x2 = 23", если я их правильно понял.
0
 Аватар для Voronkin
469 / 296 / 166
Регистрация: 18.03.2018
Сообщений: 960
09.12.2019, 18:04
Цитата Сообщение от Элд Хасп Посмотреть сообщение
x1 + x2 = 23
Как по мне - эту строку трудно назвать "Осмысленным текстовым сообщением, слова в которой разделяются пробелами и знаками препинания"

Мы так сейчас до двоичного кода дойдем)))))


Тема : Удалить из строки слов все однобуквенные слова
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.12.2019, 18:09
Элд Хасп, итеративный способ выдал "1 + 2 = 23"
регулярку затачивал на текст, подобный тому, что в примере, переделаю
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
09.12.2019, 18:11
Voronkin, в осмысленном тексте не может быть уравнения?
Или иного цифробуквенного слова?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2019, 18:11
Помогаю со студенческими работами здесь

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

Удалить из сообщения все однобуквенные слова регулярным выражением
Создание и применение регулярных выражений: В задаче требуется удалить из сообщения все однобуквенные слова.

Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами)
Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами). Вот начало программы надо дописать!Помогите пожайлуста! ...

Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами)
Удалить из сообщения все однобуквенные слова (вместе с лишними пробелами). Помогите

Удалить из строки все слова, нарушающие алфавитный порядок слов
Имя процедуры/функции:DelWordsABC(s) Удалить из строки все слова, нарушающие алфавитный порядок слов. Подскажите как сделать пожалуйста!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru