Опубликован: 14.12.2010 | Доступ: свободный | Студентов: 3137 / 738 | Оценка: 4.53 / 4.12 | Длительность: 26:28:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Лекция 7:
Символьные массивы в языке С. Работа со строками
Задание 7
- Условие оператора while сделайте короче.
- Ввести свою фамилию (буквами латинского алфавита), год рождения (числом), месяц рождения (словом) и приблизительный свой вес с точностью до долей килограмма. Результат выполнения программы занесите в отчет лабораторной работы.
- Вместо переменных и массива типа double примените тип float. Проверьте работоспособность программы.
- Вместо оператора break примените оператор безусловного перехода goto. Проверьте работоспособность программы.
- Напишите программу при вводе строки с несколькими словами и одним числом (с десятичной точкой или без нее).
- Напишите программу при вводе строки с несколькими словами и тремя числами (с десятичной точкой или без нее).
Пример 8. Напишите программу, в которой генерируется строка символов заданного размера (более трех) и для которой определяется подстрока из трех символов, вводимой пользователем. В случае, когда подстрока не обнаружена, предусмотреть генерирование случайной строки поиска 1000 раз, и программа должна искать подстроку до первого совпадения.
Программный код решения примера:
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <time.h> int main (void) { int i, j, k, n, N = 1000, numA, numZ, in, ch_box[3]; char str[16], str2[4]; srand((unsigned)time(NULL)); numA = (int)'a'; // числовой код латинской буквы а numZ = (int)'z'; // числовой код латинской буквы z printf("\n Enter a string of 3 letters: "); in = scanf_s("%s", str2, sizeof(str2)); if ( in == 0 ) { printf("\n Error input. Print any key: "); _getch(); exit(1); } printf("\n\t substring is \"%s\"\n", str2); for (n = 0; n < N; n++) { for (i = 0; i < 15; i++) str[i] = numA + rand() % (numZ - numA) + 1; str[i] = '\0'; k = 0; for (i = 0; i < 13; i++) if (str2[0] == str[i] && str2[1] == str[i+1] && \ str2[2] == str[i+2]) { ch_box[0] = i; ch_box[1] = i+1; ch_box[2] = i+2; k++; break; } if (k > 0) break; } if (k == 0) printf("\n\t \"%s\" not found", str2); else printf("\n Substring \"%s\" found at positions %d, %d, %d", \ str2, ch_box[0]+1, ch_box[1]+1, ch_box[2]+1); puts("\n"); for (k = 0; k < 15; k++) printf(" %3d)", k+1); puts(""); for (j = 0; j < 15; j++) printf(" %3c ", str[j]); printf("\n\n ... Press any key: "); _getch(); return 0; }
букв. Интервал чисел определяется между кодом буквы 'a' и кодом буквы 'z'.
Возможный положительный результат выполнения программы показан на рис. 6.8.
Задание 8
- Условие нахождения подстроки в строке выполните с помощью оператора goto.
- В случае положительного поиска подстроки в строке, определите количество итераций цикла с предельным значением 1000.
- Предусмотрите, чтобы вводимые буквы могли быть и нижнего и верхнего регистров.
- В программе сделайте ввод с клавиатуры количество циклов формирования строки, в которой следует найти заданную подстроку.
- Сделайте поиск подстроки в строке, которую сформировали случайно один раз. Если подстроки не будет найдено, предусмотрите ввод количество попыток поиска для генерируемых строк (в 15 символов).
Контрольные вопросы
- Какой размер одномерного символьного массива должен быть объявлен для записи в него строки из 5 символов?
- Как организуются многомерные символьные массивы в языке С?
- Как организуется индексирование символьных массивов в языке С?
- На кого или на что возлагается контроль границ символьных массивов в языке С?
- Как следует объявить символьный массив для записи в него трех строк различной длины?
- Как следует организовать посимвольное заполнение одномерного массива?
- Сколько потребуется операторов цикла для вывода на консоль двухмерного символьного массива (строк различной длины)?
- Какие функции используются для считывания с консоли символьных массивов?
- Для каких функций включаются в программу заголовочные файлы ctype.h и string.h?
- Что такое лексиграфическое упорядочивание строк?
- Чем отличается сравнение строк при помощи оператора "==" (равно) и функции strcmp()?