Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1195 / 764 / 128
Регистрация: 10.03.2012
Сообщений: 4,950

Удаление повторяющихся пробелов в строке

15.05.2023, 13:09. Показов 1152. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На вход подается одна строка текста, необходимо вывести эту же строку, удалив все парные пробелы, то есть если где-то в строке идет подряд 2 или более пробелов, то в этом месте нужно оставить только один. Без использования методов: replace, split, join
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2023, 13:09
Ответы с готовыми решениями:

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

Удаление пробелов в строке
Подскажите пожалуйста, как исправить: Индекс находился вне границ массива вот код void Main() { string s = "lkfj fgef...

Удаление последовательно повторяющихся символов в строке
Имеется несколько вариантов одной переменной типа string: Каким образом удалить рядом стоящие * и привести результат к виду ...

9
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
15.05.2023, 13:39
Вводим два метода...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public static string CompactWhitespaces (string s)
{
    StringBuilder sb = new StringBuilder (s);
 
    CompactWhitespaces (sb);
 
    return sb.ToString();
}
 
public static void CompactWhitespaces (StringBuilder sb)
{
    if (sb.Length == 0)
        return;
 
    // установить [start] в первый не пробельный символ или в sb.Length
    int start = 0;
    while (start < sb.Length)
    {
        if (Char.IsWhiteSpace (sb [start]))
            start++;
        else
            break;
    }
 
    // если в [sb] есть только пробелы, то возвращается пустая строка
    if (start == sb.Length)
    {
        sb.Length = 0;
        return;
    }
 
    // установить [end] на последний не пробельный символ char
    int end = sb.Length - 1;
    while (end >= 0)
    {
        if (Char.IsWhiteSpace (sb [end]))
            end--;
        else
            break;
    }
 
    // компактная строка
    int dest = 0;
    bool previousIsWhitespace = false;
    for (int i = start; i <= end; i++)
    {
        if (Char.IsWhiteSpace (sb [i]))
        {
            if (!previousIsWhitespace)
            {
                previousIsWhitespace = true;
                sb [dest] = ' ';
                dest++;
            }
        }
        else
        {
            previousIsWhitespace = false;
            sb [dest] = sb [i];
            dest++;
        }
    }
    sb.Length = dest;
}
Далее в проге...
C#
1
2
    string str = "   Сегодня мы        пойдем в    горы...    ";
    Console.WriteLine (CompactWhitespaces(str));
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
15.05.2023, 13:58
Doomov, вот намудрили...
C#
1
2
3
4
5
6
7
8
9
10
11
            string inputStr = "   Сегодня мы        пойдем в    горы...    ".Trim();
            StringBuilder outputStr = new StringBuilder();
            for (int i = 0; i < inputStr.Length; i++)
            {
                if (inputStr[i] == ' ' && outputStr.Length > 0 && outputStr[outputStr.Length - 1] == ' ')
                {
                    continue;
                }                    
                outputStr.Append(inputStr[i]);
            }
            Console.WriteLine(outputStr.ToString());
1
1195 / 764 / 128
Регистрация: 10.03.2012
Сообщений: 4,950
15.05.2023, 15:30  [ТС]
AndreyVorobey, Без использования класса StringBuilder возможно решить эту задачу?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
15.05.2023, 16:58
Whitecolor, можно, при помощи регулярных выражений.

Добавлено через 3 минуты
Вот здесь гляньте, красиво и без костылей.
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
15.05.2023, 17:10
C#
1
2
var text = "Удаление       повторяющихся         пробелов в       строке";
text = new Regex(@"\s{2,}").Replace(text, " ");
1
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
15.05.2023, 17:30
Whitecolor,
C#
1
2
3
4
5
6
private static readonly string _findSpaces = @"[\s]+";
 
private static readonly Regex _regexSpaces = new Regex(_findSpaces, RegexOptions.Compiled);
 
// и в методе
string newText = _regexSpaces.Replace(text, " ");
1
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
15.05.2023, 17:34
iLinks, Andrey-MSK,
Цитата Сообщение от Whitecolor Посмотреть сообщение
Без использования методов: replace, split, join
Добавлено через 49 секунд
Whitecolor, так замените StringBuilder на string, и outputStr.Append делайте outputStr +=
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
15.05.2023, 17:34
AndreyVorobey, Это методы от string, а мы показали от Regex
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
15.05.2023, 23:18
Цитата Сообщение от Whitecolor Посмотреть сообщение
вывести эту же строку, удалив все парные пробелы,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace Core2023
{
    public static class StringHelper
    {
        public static IEnumerable<char> RemoveDuplicateSpaces(this IEnumerable<char> source)
        {
            bool isPrevSpace = false;
            foreach (char c in source)
            {
                if (c != ' ')
                {
                    isPrevSpace = false;
                    yield return c;
                }
                else
                {
                    if (!isPrevSpace)
                    {
                        yield return c;
                        isPrevSpace = true;
                    }
                }
            }
        }
    }
}
C#
1
2
3
4
{
    string text = " Без   использования   класса  StringBuilder             возможно  решить эту                задачу?";
    string norm = string.Concat(text.RemoveDuplicateSpaces());
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2023, 23:18
Помогаю со студенческими работами здесь

Удаление лишних пробелов в строке
Привет всем! Есть задача, задание такое: &quot;Cоставьте программу, которая будет вводить строку в переменную String. Удалите из нее все лишние...

Удаление всех пробелов в строке
Напишите программу на языке C#, удаляющую из строки все пробелы даже если в строке стоят два пробела подряд они должны быть удалены . ...

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

Удаление повторяющихся пробелов / символов в тексте
есть исходник текстового редактора, надо вставить 2 действия на 2 разные кнопки 1. удаление повторяющихся пробелов в тексте 2. удаление...

Работа со строками С++ Удаление повторяющихся пробелов и двойных запятых
Добрый вечер. Помогите разработать программу для удаления в тексте двойных пробелов + удаления повторяющихся запятых(,,, заменит на...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru