Имя: Пароль:
1C
1С v8
задача подсчета количества слов в строке
,
0 TimonXPumbA
 
24.04.12
17:31
Покажите пожалуйста кто-нибудь правильный код к задаче:
Нужно разработать функцию, на вход подается произвольная строка. Функция должна вернуть количество слов в ней. Слово - последовательность символов, не содержащая пробела. Считать, что слова могут разделяться любым количеством пробелов.

я начинающий, примерно что нужно сделать знаю, но не знаю как реализовать в код :(
1 Дикообразко
 
24.04.12
17:33
xxxxx:
В контрольной работе по информатике для студентов экономического факультета требовалось написать на Паскале программку - подсчитать сколько раз в введенной с клавиатуры строке встречается подстрока "мн". Выдержка из одной контрольной:
...
writeln('Введите строку');
readln(str);
writeln('Сколько раз в этой строке встречается подстрока "мн"?');
readln(n);
writeln('Такая подстрока встречается:',n,'раз');
...

http://bash.im/quote/278092


и причем тут 1С ?
2 zak555
 
24.04.12
17:34
не только пробел нужно учитывать, но и неразрывной
3 Euguln
 
24.04.12
17:34
СтрЧислоВхождений  :)
4 ptiz
 
24.04.12
17:35
(3)+ Ну и сначала удалить соседние пробелы
5 Дикообразко
 
24.04.12
17:37
в принципе можно решить в одну строку ;)
6 Господин ПЖ
 
24.04.12
17:38
СтрЗаменить(" ", Символы.ПС) и посчитать кол-во не пустых ?
7 Argon
 
24.04.12
17:38
Черт я в 2 смог только :(
8 Дикообразко
 
24.04.12
17:39
(7) кмх.. наверно прав...
в одну не получиться :(
хотя может стоит подумать подольше :)
9 Argon
 
24.04.12
17:44
ЧислоСлов = СтрЧислоВхождений(СокрЛП(СтрЗаменить(СтрЗаменить(стр,"  "," "),"  "," "))," ")+1;
10 Широкий
 
24.04.12
17:44
Если с "Выполнить" - то можно и в одну :))
11 Argon
 
24.04.12
17:44
Что то типа этого :)
12 echo77
 
24.04.12
17:46
// Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
//        три из которых - пустые строки, а
//        ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//    Параметры:
//        Стр -            строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -    строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        массив значений, элементы которого - подстроки
//
Функция мРазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
   
КонецФункции // глРазложить
13 Argon
 
24.04.12
17:47
Блин просили не раскладывать, а посчитать слова :)
14 Широкий
 
24.04.12
17:47
Буду банальным :)
Функция КоличествоСлов(ИсходнаяСтрока)
   КоличествоСлов=0;
   
   ИсходнаяСтрокаМ=СтрЗаменить(ИсходнаяСтрока," ",Символы.ПС);
   Для сч=1 По СтрЧислоСтрок(ИсходнаяСтрокаМ) Цикл
       Если ПустаяСтрока(СтрПолучитьСтроку(ИсходнаяСтрокаМ,сч)) Тогда
           Продолжить;
       КонецЕсли;
       
       КоличествоСлов=КоличествоСлов+1;
   КонецЦикла;
   
   Возврат КоличествоСлов;
КонецФункции
15 Deon
 
24.04.12
17:49
А чё без запросов-то?
16 Deon
 
24.04.12
17:49
(9) Не делай так. Покусают же
17 Дикообразко
 
24.04.12
17:50
(9)
не выполняется

"Считать, что слова могут разделяться любым количеством пробелов. "
18 Argon
 
24.04.12
17:50
Извращенцы
19 Argon
 
24.04.12
17:50
(17) А если подумать?
20 Широкий
 
24.04.12
17:51
(19) "Это тебе надо      подумать"
21 Deon
 
24.04.12
17:52
(19) На дырке из 3х пробелов уже сдохнет
22 Дикообразко
 
24.04.12
17:52
(20) все у него правильно :))

(19) понял..
зачет..
в две строки я думал через структуру сделать
23 Дикообразко
 
24.04.12
17:52
(21) для этого у него контрольный стрзаменить ;)
24 Argon
 
24.04.12
17:53
(20) :( мну дурак
25 Argon
 
24.04.12
17:54
(22) при большем количестве пробелов не сработает реально я тупанул )
26 Deon
 
24.04.12
17:54
(23) А, не из 3х, из 5
27 Дикообразко
 
24.04.12
17:56
(26) кхм..
останется 2 пробела...
28 х86
 
24.04.12
17:56
(0)меняешь 2,3,4,5 ... т.д пробелов на один пробел
считаешь количество пробелов
29 Argon
 
24.04.12
17:58
Версия 1.1 (с костылями)
ЧислоСлов = СтрЧислоВхождений(СокрЛП(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(стр,"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "),"  "," "))," ")+1;
30 zak555
 
24.04.12
17:58
(29) что такое рекурсия не знаешь ?
31 Дикообразко
 
24.04.12
17:59
(29) не универсально :(
32 Deon
 
24.04.12
17:59
(30) В одну строку не взлетит )
33 Дикообразко
 
24.04.12
17:59
(30) для тупых или не читающих
мы тут обсуждаем как в одну строку сделать
34 Argon
 
24.04.12
17:59
(31) главное не говорить об этом заказчику :)))
35 gavrikprog
 
24.04.12
18:03
(12)
самое оно... завернуть можно хоть в какую-нибудь сторону. И различные получить, и количество по факту
36 zak555
 
24.04.12
18:07
Функция ПоОдномуПробелуВСтроке(Слово)
 
   Возврат ? ( СтрЧислоВхождений (Слово , "  ") > 0,  ПоОдномуПробелуВСтроке ( СтрЗаменить(Слово, "  ", " ") ), Слово );


КонецФункции
37 Argon
 
24.04.12
18:17
Проверял?
38 Argon
 
24.04.12
18:25
1. Как бы где результат (количество слов)
2. СокрЛП забыл
3. Все таки 3 строки
39 Deon
 
24.04.12
18:30
Нате вам боле менее универсальную фигулю в одну строку:
Слов = СтрЧислоВхождений ( СтрЗаменить( СтрЗаменить(СокрЛП(Стр), " ", "ЭтаПрабэл"), "таПрабэлЭ", ""), "ЭтаПрабэл") + 1;
40 zak555
 
24.04.12
18:32
(39) что это ?
41 Deon
 
24.04.12
18:33
(40) Это хрень которая посчитает тебе количество слов в строке, разделенных любым количеством пробелов.
42 Argon
 
24.04.12
18:42
(41) четко :)  но лучше комбинацию сцец символов )))
43 Deon
 
24.04.12
20:20
(42) Да, разумеется.
44 Широкий
 
25.04.12
09:54
(39) Зачет.. Сам придумал?
45 Широкий
 
25.04.12
10:09
И на выставку :)

КоличествоСлов=СтрЧислоВхождений(СтрЗаменить( СтрЗаменить(СокрЛП(ИсходнаяСтрока), " ", "$##$"), "##$$", ""),"$##$")+ЗначениеЗаполнено(ИсходнаяСтрока);
46 Дикообразко
 
25.04.12
10:29
ну все,
ветку можно закрывать