Лабораторная работа 7 обработка строк
Цель работы: знакомство с программными средствами описания и обработки строковых данных в языке Си.
Методические указания к выполнению работы:
Строки - это последовательность символов, заключенная в кавычки. В конце каждой строки компилятор добавляет нулевой символ, представляемый управляющей последовательностью \0. Строка описывается как массив символов. Число элементов массива равно числу элементов в строке плюс символ конца строки (\0). Символьная строка в программе может располагаться на нескольких строках. Для переноса используется обратная дробная черта с последующим нажатием клавиши ввод. Обратная дробная черта игнорируется компилятором, и следующая строка считается продолжением предыдущей. Для работы со строками очень удобно использовать указатели.
Пример. Записать введенную строку символов в обратном порядке.
#include<stdio.h>
void main()
{
int top, bot;
char string[10], temp; /*описание строки как массива символов*/
scanf("%s", string); /* при вводе строк символ & не используется, так как имя массива является указателем на его начало */
for(top = 0, bot = 10; top < bot; top++, bot--) {
temp = string[top];
string[top] = string[bot];
string[bot] = temp;
}
printf("%s\n", string);
}
Для ввода одиночного символа из входного потока используется функция getchar(). Для вывода одиночного символа используется функция putchar(ch), где ch - выводимый символ. Аргументом функции вывода может быть одиночный символ (включая знаки, представляемые управляющими последовательностями), переменная или функция, значением которой является одиночный символ.
Пример. Программа вводит из входного потока один символ, а затем выводит его на экран.
#include<stdio.h>
void main()
{
char ch;
ch = getchar();
putchar(ch);
}
Пример. Программа, реализующая чтение и печать символов до ввода знака.
#include<stdio.h>
#define STOP
void main()
{
char ch;
while((ch = getchar()) != STOP)
putchar(ch);
}
В условии, стоящем после ключевого слова while, реализовано сразу три действия: ввод символа с помощью функции getchar(); занесение символа в переменную ch; проверка на признак конца ввода. Для реализации проверки на конец ввода последовательности символов используется идентификатор STOP, определенный директивой препроцессора.
Операции со строками
Описание функции работы со строками содержится в файле <string.h> библиотеки стандартных функций.
1. Соединение последовательностей символов.
char *strcat(char *s1, char *s2)
Функция возвращает указатель на полученную строку.
2. Поиск первого вхождения символа в строку.
char *strchr(char *s, int c)
Функция просматривает строку (обращение к строке с помощью указателя s) и ищет символ с кодом c. Возвращает указатель на найденный символ или пустое значение.
3. Сравнение строк.
int strcmp(char *s1, char *s2)
Сравниваются две указанные строки. Результат - переменная типа int:
s1<s2 отрицательное значение
s1==s2 значение 0
s1>s2 положительное значение
4.Копирование символов.
char *strcpy(char *s1, char *s2)
Копируется последовательность символов, указанная параметром s1 по адресу s2.
5. Определение длины строки (без завершающего нуля).
int strlen(char *s)
6. Функции проверки символов.
Для проверки символов используются функции, возвращающие значения "истина" или "ложь". Прототипы этих функций описаны в файле <ctype.h> библиотеки стандартных функций. Функция "Истина", если
isalpha(c) c - символ алфавита
isupper(c) c - символ верхнего регистра
islower(c) c - символ нижнего регистра
isdigit(c) c - цифра от 0 до 9
isxdigit(c) c - шестнадцатеричная цифра
isalnum(c) с - буква или цифра
isspace(c) c - пробел, табуляция, перевод строки, перевод формата
Для ввода и вывода строк в программе удобно использовать функции gets(char *string) и puts(char * string).
Пример. Программа проверяет введенную строку и, затем, выводит на экран ту ее часть, которая начинается с символа 'y'.
#include<stdio.h>
#include<string.h>
void main()
{
char string[10];
char *ptr;
printf("Введите строку\n");
gets(string);
ptr = strchr(string,'y');
printf("это строка %s\n", ptr);
}