Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
7.1. Вбудований об'єкта String.
Багато мов програмування дозволяють обробляти рядкові дані. Алфавіт — це кінцева множина символів. Рядок — кінцева послідовність символів деякого алфавіту, якщо розглядаємо алфавіт А, складається з двох символів (0, 1), то рядками в алфавіті А є: 1001, 1, 01, 10, 1111 і т. д. Порожній рядок — це рядок, що не містить жоден символ. В рядку важливий порядок символів, так, рядки 01 і 10 різні. Довжина рядка рівна числу символів в рядку. Довжина порожнього рядка рівна нулю, довжина рядка 11 рівна двом, довжина рядка 1001 — чотирьом. Якщо Х і Y — рядки, то їхнім зчепленням або конкатенацією називається рядок XY, отриманий приписуванням символів рядка Y за символами рядка Х. В попередніх лабораторних роботах неодноразово використовувалися рядкові літерали, наприклад, при виведенні деякої інформації в документ Document.write ("Площа рівна", s). Рядкові літерали або рядкові перемінни є в мові JavaScript об'єктом типу string, до якого можуть бути застосовані методи, визначені в мові. Створення нового об'єкта вимагає виклику функції-конструктора об'єкта. Для того, щоб створити рядковий об'єкт, треба застосувати конструктор newString, наприклад:
s=newString("результат=")
Об'єкт string має єдину властивість length (длина строки). Вираз s.length видає значення, рівне довжині рядка, що міститься в рядковому об'єкті s.
Для зміни регістра рядкових перемінних на мові JavaScript є вбудовані методи, такі як s.toLowerCase() і s.toUpperCase(), де s-це ім'я перемінной. Команда s.toLowerCase() перетворить рядок s в символи нижнього регістра (рядкові букви). Команда s.toUpperCase() перетворить рядок s в символи верхнього регістра (прописні букви).
Для повернення одного символа з рядкової перемінной на мові JavaScript так само існує вбудований метод, такий як s.charAt(i), де i- індекс символа. Команда s.charAt(i) повертає символ s рядка s з номером i. Необхідно врахувати, що нумерація починається не з 1, а з 0.
Ще одне призначення підрядкових перемінних - це відшукання рядкових перемінних по тексту, що міститься, в них. Для цього використовуються два методи indexOf() і lastIndexOf(). Наприклад, s.indexOf("Маша"), s.lastIndexOf("Маша"), де s-это ім'я перемінной, а "Маша " - шукани підрядок. Команда s.indexOf("Маша") повертає початок першого входження підрдка "Маша" в рядку s. Команда s.indexOf("Маша",7) робить те ж саме, але починаючи з позиції 7. Команда s.lastIndexOf("Маша") здійснює пошук підрядка з кінця рядка. Команда s.lastIndexOf("Маша",7) проводить аналогічний пошук, але починаючи з позиції 7.
Метод substring(n1,n2) повертає частину значення рядкового об'єкта, визначеного двома індексами, указаними в дужках.
Так само існують і інші методи для роботи з рядковими перемінними:
1. s.big() - команда аналогічна використанню тега BIG (крупний шрифт)
2. s.blink() - команда аналогічна використанню тега BLINK (мигання в Netscape)
3. s.bold() - команда аналогічна використанню тега BOLD (напівжирний шрифт)
4. s.fontcolor() - команда змінює колір рядка тексту. Відповідає тэгу FONT з атрибутами кольору
5. s.fontsize() - команда змінює розмір шрифту. Відповідає тэгу FONT з атрибутами розміру шрифту
6. s.italics() - команда аналогічна використанню тега I (курсив)
7. s.link() - команда створення посилання на іншу Web-страницу. Вимагає як аргумент URL для HREF
7.2. Виведення символів рядка в "стовпчик"
Напишемо сценарій, при виконанні якого заданий текст виводиться в "стовпчик", тобто на кожному рядку розміщується по одному символу.
При рішенні задачі із заданого рядка послідовно вибираються символи. Формується новий рядок, в якому за кожним символом ставиться послідовність символів, що забезпечує перехід на новий рядок. Коли рядок результату сформований, то вона розміщується в текстовому полі форми, тим самим для початкового рядка здійснюється виведення в "стовпчик".
Приклад 7.1.
<HTML>
<HEAD>
<TITLE>Вывод символов строки в "столбик"</TITLE>
<script language="JavaScript">
function ttest(s) {
var sres="Прочитанный текст:"+" \r\n"+s+"\r\n"+
'Текст в "столбик":'+"\r\n"
var cur=""
for (var i=0; i<=s.length-1; i+=1)
{с=s.charAt(i); cur +=с+"\r\n" }
sres+=cur
return sres
}
</script>
</HEAD>
<BODY bgcolor="#FFFFCC">
<h4>Символы текущей строки в столбик</h4>
<FORM name="form1">
Введите строку: <input type="text" size=20 name="st1"><hr>
<input type="button" value=Выполнить
onClick="form1.res.value=ttest(form1.st1.value)">
<input type="reset" value=Очистить><hr>
<textarea cols=20 rows=9 name="res"></textarea>
</FORM>
</BODY>
</HTML>
Рядок є універсальним способом уявлення інформації. Часто користувач вводить інформацію у вигляді рядка, а програма повинна уміти розпізнавати, якого роду дані були введені. В наступній задачі рядок, що вводиться, представляє собою послідовність оцінок, і потрібний цей рядок проаналізувати і витягати з неї потрібні дані.
7.3. Зведення за наслідками проведення іспиту
Напишемо програму, яка по послідовності оцінок, отриманих на іспиті, формує зведення. В зведенні містяться відомості про число студентів, що здали іспит на "відмінно", "добре", "задовільно" і "незадовільно". Крім того, підраховується середній бал, на який зданий іспит. Для обчислення середнього бала підсумовуються всі оцінки, отримані на іспиті, і розрахована сума ділиться на число студентів.
У функцію syod поступає рядок. За допомогою циклу є видимим символи рядка, вибираються ті, які відповідають оцінці, інші ігноруються. У функції використовується чотири перемінні t2, t3, t4, ts для зберігання числа оцінок. В тілі циклу всі оцінки підсумовуються для того, щоб потім отримати середній бал по предмету. Після аналізу всього рядка у відповідних полях форми виводиться необхідна інформація так, як зображено на рисунку.
Приклад 7.2.
<HTML>
<HEAD>
<TITLE>Работа со строками. Сводка по экзамену</TITLE>
<script language="JavaScript">
function svod(obj) {
var t2=0; var t3=0; var t4=0; var t5=0
var s=0; var n =0; var i; var r
var st=obj.data.value
for (i=0; i<st.length; i++)
{r = st.charAt(i);
if (r>="2" && r<="5")
{n=n+1
s=s+Number(r)
switch (r)
{case "2": {t2++; break};
case "3": {t3++; break};
case "4": {t4++; break};
case "5": {t5++; break};
}
}
}
obj.res2.value=t2; obj.res3.value=t3
obj.res4.value=t4; obj.res5.value=t5
obj.num.value=n; obj.sr.value=s/n
}
</script>
</HEAD>
<BODY bgcolor="#FFFFCC">
<h4 align=center>Формирование сводки по экзамену</h4>
<FORM name="form1"><CENTER>
Введите последовательно все оценки, полученные на экзамене
<input type="text" name="data" size="30"> <br>
После ввода всех оценок нажмите на кнопку
<input type="button" value="Сводка" onClick="svod(form1)"><hr>
<table border=3><caption>Сводка по экзамену</caption>
<tr><th bgcolor=silver>оценка
<th bgcolor=silver>число сдавших на оценку
<tr><td>отлично
<td align=center><input type="text" name="res5"
size="5">
<tr><td>xopomo
<td align=center><input type="text" name="res4"
size="5">
<tr><td>удовлетвopительно
<td align=center><input type="text"
name="res3" size="5">
<tr><td>нeyдовлетвopительно
<td align=center><input type="text" name="res2"
size="5">
<tr><th colspan=2 bgcolor=silver align=center>
Дополнительные сведения
<tr><td>количecтво сдавших
<td align=center><input type="text" name="num"
size="10">
<tr><td>cpeдний бал
<td align=center><input type="text" name="sr" size="10">
</TABLE>
<input type="reset" value="Отменить">
</FORM>
</BODY>
</HTML>
7.4. Перевірка ідентифікатора
Напишемо програму, визначальну, чи є послідовність введених символів ідентифікатором. Під ідентифікатором будемо розуміти послідовність букв латинського алфавіту (як прописних, так і рядкових) і цифр. Послідовність символів, що є ідентифікатором, повинна починатися з букви.
При рішенні задачі перевіримо перший символ введеного рядка. Якщо символ не є буквою, то задача вирішена: введена послідовність символів не є ідентифікатором. Якщо ж перший символ — буква, то аналіз рядка потрібно продовжити. По черзі є видимим всі символи послідовності. Якщо який-небудь елемент не є буквою або цифрою, то аналіз рядка потрібно припинити, а роботу циклу перервати. Якщо переглянули всі символи рядка, і кожний з них задовольняє нашій умові, то введений рядок представляє собою ідентифікатор.
Приклад 7.3.
<HTML>
<HEAD>
<TITLE>Последовательность символов - идентификатор</TITLE>
<script language="JavaScript">
function idt(obj) {
var s=obj.data.value
var res=1
var ch=s.charAt(0)
if (!(ch>='а' && ch<='z' ¦¦ ch>='А' && ch<='Z'))
res=0;
if (res!=0)
{for (var i=1; i<=s.length-1; i++)
{ch=s.charAt(i)
if (!(ch>='а' && ch<='z' ¦¦ ch>='А' && ch<='Z' ¦¦
ch>='0' && ch<='9'))
{res=0; break}
}
}
if (res==1) obj.result.value="идентификатор"
else obj.result.value="He является идентификатором"
}
</script>
</HEAD>
<BODY>
<h4>Является ли последовательность символов идентификатором?</h4>
<FORM name="form1">
<input type="text" name="data" size="8">
<input type="button" value="Опpeделить" onClick="idt(form1)">
<input type="text" name="result" size="28"><hr>
<input type="reset" value="Отменить">
</FORM>
</BODY>
</HTML>
7.5. Обчислення кількості повторень символа в рядку
Необхідно написати програму, яка визначає, скільки разів деякий символ зустрічається в заданому тексті.
Досліджуваний текст визначається у формі, за допомогою тега <textarea>. Алгоритм розв'язання простий. Є видимим рядок зліва направо, і кожний символ рядка порівнюється із заданим символом. Після перегляду всього тексту буде визначено число символів в тексті, співпадаючих з даним.
Приклад 7.4.
<HTML>
<HEAD>
<TITLE>Количество заданих символов в тексте</TITLE>
<script language="JavaScript">
function numsym(obj) {
var h=obj.data.value
var s=obj.textin.value
var res=0
for (var i=0; i<=s.length-1; i++)
{ch=s.charAt(i)
if (ch==h)
{res+=1}
}
obj.result.value=res
}
</script>
</HEAD>
<BODY>
Количество заданих символов в тексте
<FORM name="form1">
Введите текст:<br>
<textarea name="textin" rows=4 cols=20></textarea><hr>
Введите символ: <input type="text" name="data" size="8"><hr>
<input type="button" value="Определитъ"
onClick="numsym(form1)"><hr>
Количество символов в тексте:
<input type="text" name="result" size=8><hr>
<input type="reset" value="Отменить">
</FORM>
</BODY>
</HTML>
Одним з часто використовуваних є метод виділення з рядка необхідною підрядка. Метод substring(n1,n2) повертає підрядок, заданий індексами min(n1,n2) і max(n1,n2)-1. Якщо n1=n2, то результатом буде порожній рядок. Якщо рядок s="Решение", то значенням s.substring(0,1) буде перший символ рядка "Р". Результатом виконання s.substring(0,7) буде весь рядок.
7.6. Виведення префіксів рядка
Напишемо програму, яка виводить всі префікси заданого рядка.
Рядок х називається префіксом рядка s, якщо рядок s представим як XY. В прикладі 7.5 показано, як може бути організовано виведення префіксів введеного рядка.
При рішенні задачі будемо використовувати метод substring, "нарощуючи" на кожному кроці ітерації рядок, що є префіксом заданій.
Приклад 7.5.
<HTML>
<HEAD>
<TITLE>Вывод всех префиксов строки</TITLE>
<script language="JavaScript">
function pref(obj) {
var s=obj.data.value
var res=""
for (var i=1; i<=s.length; i++)
{res+=s.substr(0,i)+"\r\n" }
obj.textpref.value=res
}
</script>
</HEAD>
<BODY bgcolor="#FFFFCC">
<h4>Вывод всех префиксов заданого слова</h4>
<FORM name="form1">
Введите слово: <input type="text" name="data" size="15"><hr>
<input type="button" value="Определить" onClick="pref(form1)"><hr>
<textarea name="textpref" rows=15 cols=15></textarea><hr>
<input type="reset" value="Отменить">
</FORM>
</BODY>
</HTML>
7.7. Виведення суфіксів рядка
Необхідно написати програму, яка виводить всі суфікси заданого рядка. Рядок Y називається суфіксом рядка s, якщо рядок s представимим як XY.
При рішенні цієї задачі потрібно спочатку виділити останній символ рядка, потім передостанній і останній і т. д. Функція suf здійснює формування рядка, який потім буде поміщена у відповідне поле форми, в рядку зберігаються суфікси введеного слова:
function suf(obj) {
var s=obj.data.value
var n=s.length
var res =""
for (var i=n-l; i >=0; i--)
{ res +=s.substr (i-,n)+"\r\n" }
obj.textsuf.value = res
}
Метод substr (n1,n2) також дозволяє виділяти з рядка підрядок. Параметр n1 задає позицію першого символа підрядка; параметр n2 визначає кількість символів в підрядку. Наприклад, якщо рядок s="сборник", то в результаті виконання substr (0,4) буде виділена подстрока "сбор".
7.8. Обчислення кількості повторень рядка в тексті
Напишемо програму, яка визначає, скільки разів задане слово зустрічається в певному тексті.
В тексті слова розділяються пропусками. Після того, як чергове слово знайдено, перегляд продовжується з символа, наступного за знайденим словом.
Приклад 7.6.
<HTML>
<HEAD>
<TITLE>Количество заданных слов в тексте</TITLE>
<script language="JavaScript">
function numword(obj) {
var h=obj.data.value
var s=obj.textin.value
s=' '+s+' '
h=' '+h+' '
var m=h.length
var res=0
var i=0
while (i<=s.length-1)
{ch=s.substr(i,m)
if (ch==h) {res+=1; i=i+m-1}
else
i++
}
obj.result.value=res
}
</script>
</HEAD>
<BODY bgcolor="#FFFFCC">
<h4>Количество заданных слов в тексте</h4>
<FORM name="form1">
Введите текст:<br>
<textarea name="textin" rows=4 cols=20></textarea><hr>
Введите слово: <input type="text" name="data" size="8"><hr>
<input type="button" value="Опpeдeлить"
onClick="numword(form1)"><hr>
Количество слов в тексте: <input type="text" name="result"
size=8><hr>
<input type="reset" value="Отменить">
</FORM>
</BODY>
</HTML>
7.9. Дзеркальна перестановка символів
Напишемо функцію, яка формує рядок, що є переверненою по відношенню до заданої. Якщо заданий рядок "сокира", то по ній повинен бути побудована рядок "гомін".
Є видимим початковий рядок s зліва направо, і одночасно формується новий рядок s1, елементи в яку добавляються з початку. Функція rev перевертає початковий рядок.
function rev(s)
{ var n=s.length-1
var h
var s1=''
for (var i=0; i<=n; i++)
{ s1+=s.charAt(n-i) }
return s1
}
7.10. Паліндром
Паліндромом вважається рядок, який читається однаково як зліва на право, так і справа наліво. Паліндромамі є слова: козак, кок, курінь і ін. Паліндромамі можуть бути фрази, звичайно вважається, що пропуски між словами, розділові і відмінність знаки між маленькими і великими буквами ігноруються. Наприклад, палиндромами є фрази:
а троянда впала на лапу Азора
кит на морі не романтик
Будемо аналізувати текст з обох кінців, пропускати пропуски. Якщо обидва аналізовані символи не є пропусками, то порівняємо ці символи. Якщо вони різні, то аналіз тексту можна завершити, фраза не є палиндромом. Якщо ж чергові символи однакові, то аналіз потрібно продовжити. Помітимо, що значення р1 в програмі може тільки збільшуватися, значення р2 лише зменшуватися. Процес перевірки потрібно припинити у разі, коли значення р1 стане більше або рівно значенню р2. Це означає, що переглянутий весь рядок, і символи на відповідних місцях однакові.
Приклад 9.7.
<HTML>
<head>
<TITLE>Проверка, является ли строка палиндромом</TITLE>
<script language="JavaScript">
function pal(obj) {
var s=obj.data.value
var n=s.length-1
var р1=0
var р2=n
var с1=s.charAt(0)
var с2=s.charAt(n)
var р=true
var s1=""
while ((р1<р2)&&(р==true))
{if (с1=" ") {р1+=1; с1=s.charAt(р1)}
else
if (с2=" ") {р2-=1; с2=s.charAt(р2)}
else
if (с1==с2)
{р1+=1; с1=s.charAt(р1); р2-=1; с2=s.charAt(р2)}
else {р=false}
}
if (!р) s1="не является палиндромом"
else s1="является палиндромом"
obj.res.value=s1
}
</script>
</head>
<BODY>
<h4>Является ли строка палиндромом?</h4>
<FORM name="form1">
<pre>
Введите строку: <input type="text" name="data" size="50"><hr>
Результат: <input type="text" name="res" size="30"><hr>
<input type="button" value="Опpeделить" onClick="pal(form1)"><hr>
<input type="reset" value="Отменить">
</pre>
</FORM>
</BODY>
</HTML>
Дата публикования: 2015-04-10; Прочитано: 334 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!