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

Substring

17.02.2022, 16:40. Показов 1151. Ответов 4

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
public static string TextToNumberBinary(string text) 
    {
            text = Regex.Replace(text, "ноль", "0", RegexOptions.IgnoreCase);
            text = Regex.Replace(text, "один", "1", RegexOptions.IgnoreCase);
            text = Regex.Replace(text, "[^01]", "");
            
            int newLength = text.Length - (text.Length % 8);
            
            return text.Substring(0, newLength);
    }
}
Есть такой код. Он переводит слова ноль и одни в цифры, игнорируя другие слова и возвращает изменённую строку, если результат кратный восьми. Если результат не кратный восьми , то возвращает пустую строку.

Верхние строки кода мне понятны они записывают изменённую строку , меняя слова на цифры, игнорирую другие слова и убирая пробелы.
Не понятно, как работает
C#
1
return text.Substring(0, newLength);
Судя по тому , как я понимаю , если длина строки кратна 8, то есть остаток от деления на цело нуль, то возвращается строка от 0 до последнего символа.
Вопрос : как здесь реализуется случай, когда стока не кратна восьми? В этом случае должна возвращаться пустая строка. Как она образуется здесь мне не понятно? Поясните , пожалуйста.
Это не мой код , я пока до такого не додумался .
У меня вот такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void Main(string[] args)
        {
            
            string text = "Ноль один  ноль  один ноль  один ноль  один два Ноль один ноль один ноль  один ноль  один два";
            text = text.ToLower();
            text = text.Replace("ноль", "0").Replace("один", "1").Replace(" ", "");
            char[] txt= new char[text.Length];
            string s = string.Empty;
            for (int i = 0; i < text.Length; i++)
            {
                if (text[i] == '0' || text[i] == '1')
                    txt[i] = text[i];
                else
                    txt[i] = ' ';
            }
            string str = new string(txt);
            str=str.Replace(" ", "");
            if (str.Length%8==0)
                Console.WriteLine(str);
            
            else
                Console.WriteLine(s);
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2022, 16:40
Ответы с готовыми решениями:

Работа с Substring
При помощи метода Substring() извлечь из исходной строки 3 подстроки. Сравнить их по количеству элементов в каждой строке и расположить в...

Substring/Trim строк
Привет. есть две строки: private static string name = &quot;gorod (milk) (0 - 190)&quot;; private static string name2 = &quot;voda (0 -...

Работа с String.Substring
Возникла очень странная проблема с substring, когда я делал интерпретатор. А точнее обработчик арифметических выражений. Сидел тут...

4
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
17.02.2022, 20:54
Лучший ответ Сообщение было отмечено MaxRik как решение

Решение

Цитата Сообщение от MaxRik Посмотреть сообщение
и возвращает изменённую строку, если результат кратный восьми. Если результат не кратный восьми , то возвращает пустую строку.
Цитата Сообщение от MaxRik Посмотреть сообщение
Вопрос : как здесь реализуется случай, когда стока не кратна восьми? В этом случае должна возвращаться пустая строка.
Не совсем так. Операция % возвращает остаток от деления, а не кратный/некратный.
Код выше обрезает лишние символы (если они есть), чтобы в итоге длина строки всегда получалась кратна восьми. А если строка изначально меньше 8-ми, то такой и остаётся.

Например строка из 12 символов
011011001110
операция остатка от деления 12%8 вернёт 4.
011011001110
Значит 12 - 4 = 8 это и будет новая длина строки, то-есть первые 8 символов.

Или начальная строка из 18-ти символов
111001010010101101
операция остатка от деления 18%8 вернёт 2
111001010010101101
Значит 18 - 2 = 16 это и будет новая длина строки.

Если длина строки меньше 8, например 5
10101
то операция 5 % 8 = 0, и новая длина строки останется неизменной, ведь 5 - 0 = 5.
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 70
17.02.2022, 21:02  [ТС]
samana,
Странно, тогда почему первый код указан, как правильное решение данной задачи:
Написать функцию, которая принимает строку в качестве аргумента. Вернуть она должна строку, содержащую 1 и 0. Их количество зависит от слов "ноль" и "один" в аргументе. Если слово не "ноль" или "один" (регистр не важен) — его нужно проигнорировать. Длина возвращаемой строки должна быть кратна 8. В противном случае нужно вернуть пустую строку.

Робот определил и второй код, как правильное решение.
p/s/ значит я правильно засомневался и понял. Думал, что чего-то не догоняю.
Спасибо .
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
18.02.2022, 07:07
MaxRik, вы правы, 5 % 8 = 5, поэтому и возвращается пустая строка, так как из длины 5 отнимается тоже 5 и соответственно новая длина строки равняется нулю.
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 70
18.02.2022, 08:37  [ТС]
samana,
Цитата Сообщение от samana Посмотреть сообщение
MaxRik, вы правы, 5 % 8 = 5, поэтому и возвращается пустая строка, так как из длины 5 отнимается тоже 5 и соответственно новая длина строки равняется нулю.
Если стока меньше восьми, то так.
Если стока состоит из 9, то этот код
C#
1
2
int newLength = text.Length - (text.Length % 8);
return text.Substring(0, newLength);
вернёт обрубок кратный восьми , а не пустую строку, как указано в задании. Я вот про что .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2022, 08:37
Помогаю со студенческими работами здесь

Почему на Substring ругается?
Доброго времени суток, подскажите пожалуйста, почему на Substring ругается? Планировалось обрезать первый символ в трёх значном числе ...

ArgumentOutOfRangeException при вызове Substring
Выдаёт исключение, не знаю на что.

Ошибка индекса символа при SubString
Здраствуйте! Имеется задача написать метод к программе в учебных целях. namespace Pluralize { public static class PluralizeTask ...

Извлечение подстроки из строки без использования Substring
Здравствуйте! Написал маленькую программу, которая извлекает подстроку из строки, в которой имеется статический метод, не...

Поиск и substring, как разобрать файл, сериализованный на C++
Кто-то когда-то сериализовал таблицу в файл. Делал он это на C++. Исходники утеряны, но результат сериализзации остался :) Текстовый...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник 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