Доброго времени суток. Вводится строка. Требуется удалить из нее повторяющиеся символы и
все пробелы. Например, если было введено "abc cde def", то должно быть
выведено "abcdef". С пробелами то понятно как, а как с другими символами?
все пробелы. Например, если было введено "abc cde def", то должно быть
выведено "abcdef". С пробелами то понятно как, а как с другими символами?
Процедура Обработка(Команда)
ИскомаяСтрока=Объект.Строка;
Пока Найти(ИскомаяСтрока, " ") > 0 Цикл
ИскомаяСтрока = СтрЗаменить(ИскомаяСтрока," ","");
КонецЦикла;
Объект.Ответ = ИскомаяСтрока;
КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ИскомаяСтрока="abc cde efg";
ИскомаяСтрока = СтрЗаменить(ИскомаяСтрока," ","");
НовСтрока = ""; повтсимв = "";
Пока СтрДлина(ИскомаяСтрока) > 0 Цикл
повтсимв = сред(искомаястрока,1,1);
ИскомаяСтрока = СтрЗаменить(ИскомаяСтрока,повтсимв,"");
новстрока = новстрока + повтсимв;
КонецЦикла;
сообщить(новстрока);
Показать Строка = "abc cde def";
СимволыСтроки = Новый Соответствие;
Подстроки = Новый Массив;
Для Сч = 1 По СтрДлина(Строка) Цикл
Символ = Сред(Строка, Сч, 1);
Если Символ = " " Тогда
Продолжить;
ИначеЕсли СимволыСтроки[Символ] = Неопределено Тогда
СимволыСтроки[Символ] = Истина;
Подстроки.Добавить(Символ);
КонецЕсли;
КонецЦикла;
Строка = СтрСоединить(Подстроки,"");
ПоказатьНо вообще да, если так все задачи на форуме спрашивать, то так никогда не научишься.
(4) Есть предположение, что некоторые "учителя" на своих курсах прямо раздают ученикам задания со словами "есть такой профессиональный ресурс ИС, там вам обязательно помогут". И вот ресурс от наплыва этих учеников становится непрофессиональным, и за одну неделю в сентябре три или четыре человека в разных ветках задавали задачи про расчет питания протеинами, подсчет количества понедельников до конца года и прочие аналогичные задачи. Потом прошло две недели, курсы закончились, и этих людей простыл и след на инфостарте...
(19) При вставить тоже придется искать по ключу, иначе непонятно, есть ли уже такой элемент или нет.
По идее, там для внутри должен быть сеттер, что-то вроде
public map[] setСоответствие(Ключ, Значение) {
Соответствие.Вставить(Ключ, Значение);
}
Т.е. то же самое. Может я и не прав...
По идее, там для внутри должен быть сеттер, что-то вроде
public map[] setСоответствие(Ключ, Значение) {
Соответствие.Вставить(Ключ, Значение);
}
Т.е. то же самое. Может я и не прав...
(25)
Надо сохранить ветку в закладках, чтобы потом наглядно показывать, как одни пишут код, а другие -г...внокак-токод.
Двойные стандарты! Непорядок!
Еще более двойные стандарты - в (15) и (16), прямо-таки классическая иллюстрация отличия 1Сника от программиста: и по объему кода, и по его читаемости, и по переносимости между платформами (кстати, ее версия в ТЗ не указана).
Надо сохранить ветку в закладках, чтобы потом наглядно показывать, как одни пишут код, а другие -
Вот еще вариант:
СтрокаСудьбы = "Abссс сссef ссdсeссссссcdggggggggnjnnnnnnnn xcmmmm sssss ooooo eeeeee aaa dfff сссссссссссс";
СтрокаСудьбы = СтрЗаменить(СтрокаСудьбы," ","");
ТаблицаВажныхЗначений = Новый ТаблицаЗначений;
ТаблицаВажныхЗначений.Колонки.Добавить("СимволВершащийСудьбу", Новый ОписаниеТипов("Строка"));
Для СчетчикСтрокТаблицаВажныхЗначений = 0 По СтрДлина(СтрокаСудьбы) Цикл
ТаблицаВажныхЗначений.Добавить().СимволВершащийСудьбу = Сред(СтрокаСудьбы, СчетчикСтрокТаблицаВажныхЗначений, 1);
КонецЦикла;
ТаблицаВажныхЗначений.Свернуть("СимволВершащийСудьбу");
МыНашМыНовыйСтрокПостроим = "";
Для Каждого СчетчикСтрокТаблицаВажныхЗначений Из ТаблицаВажныхЗначений Цикл
МыНашМыНовыйСтрокПостроим = МыНашМыНовыйСтрокПостроим + СчетчикСтрокТаблицаВажныхЗначений.СимволВершащийСудьбу;
КонецЦикла;
Показать _Строка=СтрЗаменить(выбСтрока," ","");
_НоваяСтрока="";
Пока СтрДлина(_Строка)>0 Цикл
_Смв=Лев(_Строка,1);
_НоваяСтрока=_НоваяСтрока+_Смв;
_Строка=СтрЗаменить(_Строка,_Смв,"");
КонецЦикла;
Сообщить(_НоваяСтрока);
Показать
Рез = Новый Массив(255-65);
Результат = Новый Массив( СтрДлина( Строка ) - 1 );
Для А = 1 По СтрДлина(Строка) Цикл
Поз = КодСимв(Сред(Строка, А, 1)) - 65;
Если НЕ ЗначениеЗаполнено( Рез[Поз] ) Тогда
Рез[Поз] = А
КонецЕсли;
КонецЦикла;
Поз = 0;
Для каждого А ИЗ Рез Цикл
Если ЗначениеЗаполнено(А) Тогда
Результат[А] = Симв(Поз + 65);
КонецЕсли;
Поз + = 1;
КонецЦикла;
Строка = "";
Для каждого А ИЗ Результат /Цикл
Если ЗначениеЗаполнено(А) Тогда
Строка += А;
КонецЕсли;
КонецЦикла;
Показать
Результат ="";
Для А = 1 По СтрДлина(Строка) Цикл
Симв= Сред(Строка, А, 1);
Если СтрНайти(Результат,Симв)>0 или Симв = " " тогда
Продолжить;
Иначе
Результат = Результат+Симв;
КонецЕсли;
КонецЦикла;
Показать
(31)
Вот это - по-настоящему в духе 1С!
(32)
А если попробовать создать таблицу значений. Затем в нее посимвольно загнать исходную строку.
Не, это слишком просто получается: надо сначала разложить строку в массив, массив загрузить в таблицу значений, ТЗ свернуть, выгрузить в массив и собрать массив в строку.
Вот это - по-настоящему в духе 1С!
(32)
Вверху указан код который и будет идеальным вариантом.
К моменту написания этого вашего сообщения в ветке были приведены семь вариантов кода (включая авторский - восемь), и все они "вверху". Браво, вы настоящий 1Сник!
(32)
Самый простой и понятный код, но нифига не быстрый (кстати, в (13) то же самое и даже лучше, т.к. пробелы убираются в самом начале):
Существует примерно сотня разных способов достичь желаемого, и все имеют право на существование. И идеалы у всех разные: кто-то хочет понятный код, кто-то - быстрый, кто-то еще вкладывает в это понятие и то, и другое, и, возможно, какое-нибудь третье - минимум строк и символов в них - самый короткий, использующий минимум памяти или минимум процессорного времени. Но если код решает задачу - он имеет право на существование и может быть вполне идеальным с какой-то из этих точек зрения.
Самый простой и понятный код, но нифига не быстрый (кстати, в (13) то же самое и даже лучше, т.к. пробелы убираются в самом начале):
Рез = ""; // результат, возвращаемый функцией
Пока НЕ ПустаяСтрока(Строка) Цикл // Строка - входящий параметр функции
А = Лев(Строка, 1); // получаем первый символ строки
Строка = СтрЗаменить(Строка, А, ""); // удаляем из строки этот символ
Если А = " " Тогда Продолжить КонецЕсли; // если это пробел - пропускаем ход
Рез = Рез + А; // добавляем к результату символ
КонецЦикла;
(33)ну тут еще момент, что это примитивная задача для почти любого языка программирования и решать ее надо примитивно, на низком уровне, а тут как пошли заходы с массивами, соответсвиями, несколькими проходами, хорошо еще про БСП не вспомнили (а кто и как в БСП пишет модули - по оптимизации, большой вопрос) - вот к этому и идем, вместо 6-и строк кода все чаще вызывают черте шо, написанное черти кем.
(38)
О чем я? А о том, что можно ли, не зная исходного ТЗ, по одному только коду из (15) сходу понять - какую задачу он решает? То есть, тут в миниатюре воспроизведена обычная ситуация, когда приходит новый программист, ему ставят задачу что-то подправить, он лезет в чужой код, а там нахреноверчено... см. выше.
это примитивная задача для почти любого языка программирования и решать ее надо примитивно
ИМХО, не так важно - какими методами решать, важно и о коллегах подумать, кто придет после вас.
О чем я? А о том, что можно ли, не зная исходного ТЗ, по одному только коду из (15) сходу понять - какую задачу он решает? То есть, тут в миниатюре воспроизведена обычная ситуация, когда приходит новый программист, ему ставят задачу что-то подправить, он лезет в чужой код, а там нахреноверчено... см. выше.
все чаще вызывают черте шо, написанное черти кем.
Конкретно - черти тем, кому совершенно наплевать на других. Или, как вариант, кто собирается вечно обслуживать свою нетленку... и вообще жить вечно. ;)
(39)я про конкретную задачу, а так, конечно, отталкиваться надо от конкретного тз и конкретной конфы, когда что-то не работает в незнакомой конфе, иногда проще проанализировать предыдущий говнокод в одной процедуре, чем отлаживать десятки общих модулей, которые пересылают друг другу инфу. Ни на чем не настаиваю, но, надеюсь жить вечно :)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот