Тема 5. Работа со строками, массивами, окнами и графикой

Строки и методы работы с ними

Многие языки программирования позволяют обрабатывать строковые данные. Прежде, чем рассмотреть принципы работы со строками в языке JavaScript, уточним некоторые понятия, относящиеся к строкам. Алфавит - это конечное множество символов. Строка - конечная последовательность символов некоторого алфавита. Если рассматриваем алфавит A, состоящий из двух символов {0,1}, то строками в алфавите A являются: 1001, 1,01,10,1111 и т.д. Пустая строка - это строка, не содержащая ни одного символа. В строке важен порядок символов, так, строки 01 и 10 различны. Длина строки равна числу символов в строке. Длина пустой строки равна нулю, длина строки 11 равна двум, длина строки 1001 четырем. Если X и Y строки, то их сцеплением или конкатенацией называется строка XY, полученная приписыванием символов строки Y за символами строки X.

В предыдущих примерах неоднократно использовались строковые литералы, например, при выводе некоторой информации в документ

Document.write("Площадь равна", s).

Напомним, что строковый литерал представляет собой последовательность символов, заключенную в одинарные или двойные кавычки.

Строковые литералы или строковые переменные являются в языке JavaScript объектом типа string, к которому могут быть применены методы, определенные в языке. Создание нового объекта требует вызова функции-конструктора объекта. Для того чтобы создать строковый объект надо применить конструктор new String, например,

s = new String ("результат=")

Объект string имеет единственное свойство length (длина строки). Выражение s.length выдает значение 10, равное длине строки, содержащейся в строковом объекте s. Объект string имеет два типа методов, одни методы непосредственно влияют на саму строку. С такими методами мы сейчас и познакомимся, рассматривая примеры обработки текстовой информации.

Одним из часто используемых методов является метод выделения из строки отдельного символа. Метод charAt(n1) возвращает символ, позицию которого определяет параметр n1. Символы в строке перенумерованы, начиная с 0.

Сводка по экзамену

Напишем сценарий, который по последовательности оценок, полученных на экзамене, формирует сводку. В сводке содержаться сведения о числе студентов, сдавших экзамен на "отлично", "хорошо", "удовлетворительно", "неудовлетворительно". Кроме того, подсчитывается средний балл, на который сдан экзамен. Для подсчета среднего балла суммируются все оценки, полученные на экзамене, и полученная сумма делится на число студентов.

В функцию svod поступает строка. С помощью цикла просматриваются символы строки, выбираются те, которые соответствуют оценке, остальные игнорируются. В функции используются четыре переменные t2-t5 для хранения числа оценок. В теле цикла все оценки суммируются, для того чтобы затем получить средний бал по предмету. После анализа всей строки формируется в соответствующих полях формы требуемая информация так, как изображено на рис. 6.1

Рис. 6.1. Сводка по экзамену

HTML-код представленного на рисунке документа со сценарием, формирующем сводку по экзамену, хранится в листинге 6.1.

Листинг 6.1. Формирование сводки по экзамену

<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>
<th bgcolor=silver>число сдавших на оценку </th></tr>
<tr><td>отлично </td>
<td align=center><input type="text" name="res5" size="5"></td></tr>
<tr><td>хорошо </td>
<td align=center>
<input type="text" name="res4" size="5"></td></tr>
<tr><td>удовлетворительно </td>
<td align=center><input type="text" name="res3"size="5"></td></tr>
<tr><td>неудовлетворительно </td>
<td align=center><input type="text" name="res2" size="5"></td></tr>
<tr><th colspan=2 bgcolor=silver align=center>
Дополнительные сведения</th></tr>
<tr><td>количество сдававших </td>
<td align=center><input type="text" name="num" size="10"></td></tr>
<tr><td>средний балл</td>
<td align=center><input type="text" name="sr" size="10">
</td></tr></table>
<input type="reset" value="Отменить">
</form></body><html>

Проверка идентификатора

Напишем сценарий, определяющий, является ли последовательность введенных символов идентификатором. Под идентификатором будем понимать последовательность букв латинского алфавита (как прописных, так и строчных) и цифр. Последовательность символов, являющихся идентификатором, должна начинаться с буквы.

При решении задачи проверим первый символ введенной строки. Если символ не является буквой, то задача решена: введенная последовательность символов не является идентификатором. Если же первый символ буква, то анализ строки следует продолжить. Поочередно просматриваются все символы последовательности. Если какой-либо символ не является буквой или цифрой, то анализ строки следует прекратить, а работу цикла прервать. Если просмотрели все символы строки, и каждый из них удовлетворяет нашему условию, то введенная строка является идентификатором. HTML-код представлен в листинге 6.2.

Листинг 6.2. Проверка, является ли последовательность символов идентификатором

<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>='a' && ch<='z' || ch>='A' && ch<='Z')) res=0;
if (res!=0)
{for (var i=1; i <= s.length-1; i++)
{ch=s.charAt(i)
if (!(ch>='a' && ch<='z' || ch>='A' && ch<='Z' || ch>='0' && ch<='9'))
{res=0; break}
}
}
if (res==1) obj.result.value="идентификатор"
else obj.result.value="не является идентификатором"
}
//-->
</script>
</head>
<body>
<h4>Является ли последовательность символов идентификатором?</h4>
<form name="form1">
<input type="text" name="data" size="8">
<input type="button" value="Определить" onClick="idt(form1)">
<input type="text" name="result" size="28"><hr>
<input type="reset" value="Отменить">
</form></body></html>

Поиск слова в тексте

Напишем сценарий, который определяет, сколько раз заданное слово встречается в определенном тексте. В тексте слова разделяются пробелами. После того как очередное слово найдено просмотр продолжается с символа, следующего за найденным словом. Метод substr(i,m) возвращает подстроку, которая начинается с заданной позиции (i), и содержит заданное количество символов (m). На рис. 6.2 представлен документ.

Рис. 6.2. Число заданных слов в тексте

HTML-код документа хранится в листинге 6.3.

Листинг 6.3. Количество заданных слов в тексте

<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="Определить" onClick="numword(form1)"><hr>
Количество слов в тексте: <input type="text" name="result" size=8><hr>
<input type="reset" value="Отменить">
</form></body></html>


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: