Работа со строковыми переменными

  • doc
  • 13.05.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 158. Работа со строковыми переменными.doc

Работа со строковыми переменными

Задание 1. Ввести с клавиатуры предложение S и произвольную букву S2. Подсчитать какой процент от общества количества букв предложения S составляет буква S2.

 

Выполнение. Необходимо организовать цикл для перебора номеров букв от первой до последней. Внутри цикла следует выделять каждую букву предложения S и сравнивать ее с S2. Если они равны, то увеличивать значение переменной-счетчика на 1. В качестве результата следует вывести результат деления полученного значения переменной-счетчика на общее количество букв в предложении в процентом соотношении.

Программа

 

1     Sub string_1() 'Начало подпрограммы (макроса)

2     s = InputBox("Введите предложение?") 'Ввод исходного предложения с клавиатуры

3     s2 = InputBox("Введите искомую букву?") 'Ввод буквы для поиска

4     c = 0 'Задание начального значения для счетчика букв

5     For i = 1 To Len(s) 'Начало цикла для перебора номеров букв

6     If Mid(s, i, 1) = s2 Then c = c + 1 'Если выделенная очередная буква равна s2, то увеличиваем счетчик на 1

7     Next i 'Конец цикла перебора номеров букв

8     Debug.Print "Доля буквы '"; s2; "' в предложении '"; s; "' составляет="; c / Len(s) * 100 'Вывод результата

9     End Sub 'Окончание подпрограммы

 

Словесное описание программы

После ввода исходного предложения s (с. 2) и искомой буквы s2 (с. 3) обнуляем значения счетчика букв c (с. 4). Далее организуем цикл (с. 5–7) для перебора номеров букв i. Внутри цикла выделяем каждую букву и сравниваем ее с s2 (с. 6). Если выделенная буква равна s2, то увеличиваем счетчик c на 1 (с. 6). В конце программы делим счетчик c на общее количество букв len(s), умножаем на 100 для перевода в проценты и выводим результат на экран (с. 8).

Блок-схема

 

 

Задание 2. Во введенном с клавиатуры предложении заменить слово «Иван» на слово «Петр». Выполнить программу с помощью функции mid.

 

Выполнение. Вместо «замены» слов в исходной строке следует в цикле последовательно перебирать номера букв от 1 до последней и переписывать все буквы исходной переменной s в новую переменную s2, кроме тех букв, которые образуют слово «Иван». Вместо них следует добавлять в переменную s2 слово «Петр».

Программа

 

10   Sub string_2() 'Начало подпрограммы (макроса)

11   s = InputBox("Введите предложение?") 'Ввод исходного предложения

12   s2 = "" 'Начальное значение для результирующей строки = пустая строка

13   For i = 1 To Len(s) - 3 'Перебираем все буквы за исключением последних 3

14   s3 = Mid(s, i, 4) 'Выделяем очередные 4 буквы, начиная с текущей i

15   If s3 <> "Иван" Then 'Проверяем, является ли выделенной слово словом "Иван"

16   s2 = s2 + Mid(s, i, 1) 'Если не является, то добавляем 1 текущую букву в s2

17   Else 'Иначе, если является

18   s2 = s2 + "Петр" 'то добавляем в s2 слово Петр

19   i = i + 3 'и увеличиваем номер текущей буквы еще на 3, чтобы в последствии проверять уже после слова Иван

20   End If 'Конец ветвления

21   Next i 'Конец цикла для перебора номеров букв

22   s2 = s2 + Mid(s, i) 'Добавляем оставшиеся 3 (или менее) букв в s2

23   Debug.Print "Введенная строка = "; s 'Вывод исходной строки

24   Debug.Print "Новая строка = "; s2 'Вывод результата

25   End Sub 'Окончание подпрограммы

 

Словесное описание программы

После ввода исходного предложения s (с. 2) задаем начальное значение для результирующей переменной s2 равное пустой строке (с. 3). В цикле перебираем номера букв от 1 до длина строки – 3 (с. 4). Последние 3 буквы не следует брать, т.к. в них никак не может находиться слово «Иван», длина которого 4 буквы. В с. 5 выделяем 4 буквы, начиная с текущей i в переменную s3. В с. 6 проверяем, являются ли выделенные буквы s3 словом «Иван». Если не являются, то переписываем одну текущую букву в результирующую переменную s2 (с. 7). Иначе, добавляем в s2 слово «Петр» (с. 9). Также необходимо пропустить оставшиеся 3 буквы, чтобы при следующем проходе цикла выделились бы буквы после слова «Иван». Это делается путем увеличения номера букв i на 3 (с. 10). После завершения цикла мы имеем в переменной i номер буквы, на которой остановилась проверка. Оставшиеся буквы также надо дописать в переменную s2 (с. 13). В конце выводим исходное предложение (с. 14) и результирующее (с. 15).

Блок-схема

 

Задание 3. Выполнить задание 2 с помощью функции instr.

 

Выполнение. Как и в предыдущей программе, результат будет накапливаться в другой строковой переменной s2. В цикле следует с помощью функции instr искать очередное вхождение слова «Иван» в исходную строку s, переписывать в s2 все буквы до найденного вхождения, а вместо слова «Иван» добавлять слово «Петр».

 

Программа

 

26    Sub string_3() 'Начало подпрограммы (макроса)

27    s = InputBox("Введите предложение?") 'Ввод исходного предложения

28    s2 = "" 'Начальное значение для результирующей строки = пустая строка

29    i = 1 'Начинаем поиск с первой буквы

30    Do 'Начало цикла поиска

31    i2 = InStr(i, s, "Иван") 'Ищем слово "Иван" от текущей позиции i, и запоминаем номер его позиции в i2

32    If i2 <> 0 Then 'Если номер позиции не ноль, т.е. слово "Иван" найдено

33    s2 = s2 + Mid(s, i, i2 - i) + "Петр" 'то переписываем все буквы от текущей позиции i, до i2 и добавляем слово "Петр"

34    i = i2 + 4 'переставляем номер текущей позиции за слово "Иван"

35    End If 'Конец ветвления

36    Loop Until i2 = 0 'Если после последнего прохода слово "Иван" не было найдено, то завершаем поиск

37    s2 = s2 + Mid(s, i) 'Переписываем в s2 все оставшиеся буквы, начиная от текущей позиции i

38    Debug.Print "Введенная строка = "; s 'Вывод исходной строки

39    Debug.Print "Новая строка = "; s2 'Вывод результата

40    End Sub 'Окончание подпрограммы

 

Словесное описание программы

После ввода исходного предложения (с. 2) задаем начальное значение для результирующей строки – пустая строка (с. 3). Начальное значение для номера текущей позиции поиска i = 1 (с. 4). В цикле (с. 5–11), прежде всего, ищем очередное вхождение слова «Иван» в исходную строку s, и запоминаем номер позиции этого вхождения в i2 (с. 6). В с. 7 проверяем, найдено ли новое вхождение, т.е. i2<>0. Если найдено, то переписываем все буквы, начиная от текущей позиции поиска i до найденной позиции вхождения i2, и дописываем слово «Петр» (с. 8). Также перемещаем номер позиции поиска за найденное вхождение слова «Иван» (с. 9). В с. 11 решаем, следует ли продолжать поиск в зависимости от того, было ли найдено на последнем проходе очередное вхождение слова «Иван». После завершения цикла дописываем в s2 оставшиеся буквы (с. 12). В конце выводим на экран исходную (с. 13) и результирующую строку (с. 14).

 

 

 

 

 

 

 

 

Блок-схема

 

 

Задание 4. Из заданного предложения удалить все повторяющиеся слова.

Выполнение. Здесь для простоты будем считать, что слова разделены пробелами. Необходимо организовать цикл, который будет искать все пробелы, и выделять слова между пробелами. Найденное очередное слово следует записывать в некоторый массив, но только в том случае, если такого слова в массиве еще нет. В конце следует переписать все слова из массива в результирующую строку.

 

Программа

 

41   Sub string_4() 'Начало подпрограммы (макроса)

42   s = InputBox("Введите предложение?") 'Ввод исходного предложения

43   Dim a(100) 'Описываем массив для хранения найденных слов

44   n = 0 'Начальное количество слов в массиве = 0

45   i = 1 'Начинаем поиск с первой буквы

46   Do 'Начало цикла поиска

47   i2 = InStr(i, s, " ") 'Запоминаем номер позиции с найденным пробелом в i2

48   If i2 <> 0 Then 'Если пробел был найден

49   s3 = Mid(s, i, i2 - i) 'то в s3 помещаем слово от текущей позиции i до найденного пробела

50   i = i2 + 1 'и перемащаем номер позиции за найденный пробел,

51   Else 'иначе

52   s3 = Mid(s, i) 'помещаем в s3 последнее слово

53   End If 'конец ветвления

54   j = 1 'начинаем поиск в массиве с элемента номер 1

55   While j <= n And a(j) <> s3 'если еще не все элементы просмотрели и текущий элемент j не совпадает с выделенным словом

56   j = j + 1 'смотрим слудующий элемент

57   Wend 'конец цикла просмотра массива слов

58   If j > n Then 'если выделенное слово s3 так и не было найдено в массиве,

59   n = n + 1 'увеличиваем счетчик слов в массиве на 1

60   a(n) = s3 'запоминаем это новое выделенное слово s3 в массиве a

61   End If 'конец ветвления

62   Loop Until i2 = 0 'Если пробелов больше не найдено, завершаем поиск

63   s2 = "" 'Начальное значение для результирующей строки = пустая строка

64   For j = 1 To n 'Цикл перебора всех выделенных слов в массиве

65   s2 = s2 + a(j) + " " 'Добавляем очередное слово из массива в s2 и пробел после него

66   Next j 'Конец цикла перебора выделенных слов

67   Debug.Print "Введенная строка = "; s 'Вывод исходной строки

68   Debug.Print "Новая строка = "; s2 'Вывод результата

69   End Sub 'Окончание подпрограммы

 

Словесное описание программы

После ввода исходной строки (с. 2) описываем массив с достаточным количеством элементов (с. 3), в котором будут храниться все найденные слова без повторов. Не смотря на то, что этот массив может вместить 100 элементов, фактически в нем пока нет ни одного слова, поэтому заводим переменную-счетчик n, хранящую количество фактически найденных слов, и задаем ей начальное значение 0 (с. 4). Заводим также переменную i, служащую номером текущей позиции поиска в строке, и начинаем поиск с позиции 1 (с. 5). Начинаем цикл поиска пробелов (с. 6–22). В теле цикла, прежде всего, запоминаем номер позиции, где найден очередной пробел, в переменной i2 (с. 7). Поиск начинаем с текущей позиции поиска i. Если пробел найден (с. 8), то выделяем в s3 слово от текущей позиции i до позиции найденного пробела i2 (с. 9). Также перемещаем текущую позицию поиска на следующую за найденным пробелом букву (с. 10). Если пробел не найден, то выделяем в s3 все оставшиеся буквы от текущей позиции i (с. 12). Во второй части тела цикла ищем выделенное слово в массиве. Для этого начинаем поиск с первого элемента (с. 14). Искать следует до тех пор, как: либо номер элемента j станет больше общего количества записанных слов n, либо в текущем элементе найдется слово, совпадающее с данным выделенным словом (с. 15). Ввиду того, что использован цикл WHILE-WEND, необходимо вручную увеличивать номер текущего элемента j (с. 16). В третьей части тела цикла, если выделенное слово в массиве не найдено (с. 18), то его следует поместить в массив a (с. 20), предварительно увеличив счетчик слов n (с. 19). Поиск пробелов следует продолжать до тех пор, как последний поиск с помощью функции instr не найдет пробела и вернет 0 (с. 22). После цикла мы имеем массив всех слов без повторов. Следует объединить эти слова в результирующую строку s2, для чего задаем ей начальное значение – пустая строка (с. 23). Далее организуем цикл по всем словам в массиве (с. 24–26). Внутри цикла выполняем добавление текущего слова к результирующей строке и пробела после нее (с. 25). В конце программы выводим исходную (с. 27) и результирующую строку (с. 28) на экран.

 

 

Блок-схема

 


Скачано с www.znanio.ru