Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с текстом (https://javascript.ru/forum/misc/50669-rabota-s-tekstom.html)

Lina9494 06.10.2014 21:44

Работа с текстом
 
:write:
Всем привет! Есть такое задание: дан исходный текст на русском языке. Длина текста - не более NL символов, длина строки - не более NS символов, длина слова – не более NW символов. Исходный текст должен заканчиваться точкой. Составить процедуру, которая в заданном тексте находит слова, в которые входит заданная буква, но она не является первой буквой слова. В качестве результата вывести исходный текст, найденные слова и их количество.
У меня есть код проги, которая в заданном тексте находит слова, в которые НЕ входит заданная буква. Как исправить на нужный вариант , подскажите, пожалуйста :cray:
//laba2.3.js
var NL=80;
var NS=50;
var NW=10;
var txt="Привет! Как у тебя дела? Где точка? Вот она. \nЭто новая строка! И точка.";
var wordFind=[];
var str=txt.split('\n');
var lssn='а';
var wrd=txt.toLowerCase().split(' ');

function wordSearch(text,lesson)
{

var stp=['!','?',',','.'];

var i=0,j=0;
var countWord=0;

	while(wrd[i]!=null)
	{
		while(j!=4)
		{
			if(wrd[i].charAt(wrd[i].length-1)==stp[j])
			{
				wrd[i]=wrd[i].split(stp[j])[0];  
			}
			j++;
		}
		j=0;
		i++;
	}
	i=0;
	
	while(wrd[i]!=null)
	{
		if(wrd[i].search(lesson)==-1)
		{
			wordFind[countWord]=wrd[i];
			countWord++;
		}
		i++;		
	}
}
function check()
{
	var i=0;
	if(txt.length>NL)
	{
		WScript.Echo("Размер текста("+txt.length+" символов) превышает допустимые нормы:"+NL+" символов");
		return false;
		
	}
	else
	{
		while(str[i]!=null)
		{
			if(str[i].length>NS)
			{
				WScript.Echo("Размер "+(i+1)+"-ой строки("+str[i].length+" символов) превышает допустимые нормы:"+NS+" символов")
				return false;
			}
			i++;
		}
		i=0;
		while(wrd[i]!=null)
		{
			if(wrd[i].length>NW)
			{
				WScript.Echo("Размер "+(i+1)+"-го слова("+wrd[i].length+" символов) превышает допустимые нормы:"+NW+" символов")
				return false;
			}
			i++;
		}
		return true;
	}
}

wordSearch(txt,lssn);

if(check()!=false)
{
	WScript.Echo("Исходный текст:\n"+"'"+txt+"'"+"\nНайденные слова,не содержащие "+lssn+":"+wordFind+"\nКоличество слов:"+wordFind.length );
}

XelaNimed 07.10.2014 18:57

Здравствуйте.
Использование регулярных выражений запрещено преподавателем?! На мой взгляд решение поставленной задачи можно организовать проще при их использовании.

1. Проверяем входные данные (общая длина текста, точка в конце текста).
2. Делим текст по переносам строк, т.к. длину строки нужно проверять.
3. В цикле проверяем длину строки.
4. Регулярным выражением выбираем все слова из строки.
5. В цикле проверяем каждое слово (длину, что не начинается на искомую букву, присутствие искомого символа) и при удовлетворении всех условий добавляем в результирующий массив.

Если же использование регулярных выражений запрещено, то необходимо будет иметь объект или массив со всеми русскими буквами (т.к. перечисление всех возможных символов не тривиальная задача) и при переборе по символам строки проверять текущий символ на присутствие в массиве или объекте.
На JSFiddle набросал небольшой примерчик, как могло бы это выглядеть при использовании RegExp.

Lina9494 07.10.2014 20:43

да, спасибо большое, решение уже было найдено :)) :yes:


Часовой пояс GMT +3, время: 19:23.