не знаю, но в любом случае я не вижу как может теория автоматов помочь мне в решении этой задачи
например, в педивикии написано, что "практически, теория автоматов применяется при разработке лексеров и парсеров для языков программирования, а также при построении компиляторов и разработке самих языков программирования" |
вы бы еще написали регулярку простейшую, и сказали бы что для решения этой задачи не нужно знания регулярок, подразумевая знание сложных регулярок.
вы описали кончный автомат. в нем есть флаг состояния(предыдущий символ пробел или нет), и он анализирует строку символ за символ, и на основании обоих этих данных строит суждение о количестве слов. все сходится с теорией конечного автомата. то, что вы додумались до этого решения, не зная о конечных автоматах, не означает что они тут не были использованы. |
я не говорил, что я описал не конечный автомат. Я говорил, что не вижу как мне это знание может помочь. Эту задачу сложно решить без знания теории автоматов?
аналогия с регулярными выражениями неудачна, имхо p.s. вроде на ты до этого говорили :-? |
Цитата:
потому что стиль мышления такой. и у меня такой же. а вот, человек не смог. вот я и направил его учить теорию тебе знание этой теории не нужно для такой простой задачи а ему может быть поможет. надеюсь что так. Цитата:
в особенности на форуме. по сути безусловный рефлекс я бы даже сказал для того чтобы общатся на ты, мне надо либо начать общатся лично с человеком, например в аське, либо знать его в реале так что не обращай внимание на ВЫкание |
Цитата:
|
Конечно, несколько поздновато, но всё же.. :)
Нафига тут конечные автоматы? :) /* * Функция подсчета количества символов и слов в тексте * obj - id текстового поля, в которое вводится текст * obj_word - id поля, куда выводится количество слов * obj_char - id поля, куда выводится количество символов */ function count(obj, obj_word, obj_char) { var text = document.getElementById(obj).value; var char_cnt = text.length; while (text.indexOf(' ') != -1) text = text.replace(' ', ' '); if (char_cnt > 0) { var arWord = text.split(' '); var word_cnt = arWord.length; } else var word_cnt = 0; if(text.charAt(text.length - 1) == ' ') word_cnt--; document.getElementById(obj_word).value = word_cnt; document.getElementById(obj_char).value = char_cnt; } |
ну я бы тогда начал с (хотя условие подразумевает проход по строке)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <title>title</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script> function count( s, word, char ) { var text = document.getElementById(s).value; document.getElementById(char).value = text.length; document.getElementById(word).value = text.replace(/^\s+/, '') .replace(/\s+$/, '') .split(/\s+/).length; } </script> </head> <body> <input id="s" type="text"> <input id="word" type="text"> <input id="char" type="text"> <input type="button" onclick="count('s', 'word', 'char');"> </body> </html> |
Понятно, что с регулярками проще, но по заданию надо использовать indexOf() и charAt().
И, кстати, нигде в условии задачи я не увидел обязательного прохода по строке. З.Ы. А вот про пробелы в начале строки я и не подумал.. :( |
Цитата:
function count( s, word, char ) { var text = document.getElementById(s).value; document.getElementById(char).value = text.length; var i = 0, wordCnt = 0; while( i >= 0 ) { while( text.charAt(i) == ' ' ) i++; if( i < text.length ) wordCnt++; i = text.indexOf(' ', i); } document.getElementById(word).value = wordCnt; } |
решение с конечными автоматами (это же оно?). Получилось неожиданно (для меня) симпатично. Gvozd, я их недооценивал :thanks: Хоть и с регэкспами читабельнее
function count( s, word, char ) { var text = document.getElementById(s).value; document.getElementById(char).value = text.length; var prv = ' ', wordCnt = 0; for( var i=0; i<text.length; i++ ) { if( text.charAt(i) != ' ' && prv == ' ' ) wordCnt++; prv = text.charAt(i); } document.getElementById(word).value = wordCnt; } UPD: похоже это все-таки не конечные автоматы |
Часовой пояс GMT +3, время: 03:04. |