Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Лабораторная работа № 8. Программирование с использованием строк




 

Цель работы: овладеть навыками программирования задач с использованием строк.

 

Краткие теоретические сведения

Для представления символов в памяти компьютера используется тип char. Определение констант и переменных этого типа:

const char c1 = 'A';// константная переменная

char c = c1, c2; // переменные

Под данные типа char отводится 1 байт. Тип char является целым типом, поэтому внутреннее представление для данных типа char (их коды) — это просто целые числа.

Для работы с данными типа char можно использовать все арифметические операции, операции сравнения и побитовые операции, хотя, если учесть, что этот тип используется для представления не чисел, а именно символов, то, естественно, чаще всего применяют операции сравнения.

В языках С/С++ нет встроенного строкового типа данных. Для работы со строками используется массив данных типа char. Если подразумевается, что работа ведётся не просто с массивом символов, а со строкой, то она должна заканчиваться символом с кодом 0 ('\0' — нуль-символ). Именно нуль-символ показывает, где заканчиваются данные в таком массиве.

Пусть дана строка s (рис. 9):

Рис. 9. Строка символов

Памяти под неё отводится 6 байт, поэтому описание будет следующим:

char s[6];

Полезная информация (текст "ABC") размещается в первых трёх байтах, а затем в третьем байте находится нуль-символ '\0'.

Строку s можно было бы инициализировать, т.е. на этапе компиляции задать ей начальное значение:

char s[6] = {'A', 'B', 'C', '\0'};

Так как s — это массив (хотя и символов), поэтому инициализация записана точно так же, как это обычно делается для массива. Но s — это ещё и строка, поэтому допускается упрощённый вариант инициализации, схожий с инициализацией простых переменных:

char s[6] = "ABC";

При инициализации для строки допустимо не задавать объём выделяемой памяти:

char s[] = "ABC";

Теперь компилятор сам подсчитает, сколько требуется отвести памяти под строку, и выделит под неё необходимый объём. Функции для работы со строками и символами представлены в таблице 3.

Таблица 3

Функции для работы со строками и символами

Функция Пояснение
strlen(имя_строки) определяет длину указанной строки, без учёта нуль-символа
strcpy(s1,s2) выполняет побайтное копирование символов из строки s2 в строку s1
strncpy(s1,s2, n) выполняет побайтное копирование n символов из строки s2 в строку s1. возвращает значения s1
strcat(s1,s2) объединяет строку s2 со строкой s1. Результат сохраняется в s1
strncat(s1,s2,n) объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1
strcmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 - если s1>s2 С учётом регистра
strncmp(s1,s2) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 - если s1>s2 С учётом регистра
stricmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 - если s1>s2 Без учёта регистра
strnicmp(s1,s2) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 - если s1>s2 Без учёта регистра
isalnum(c) возвращает значение true, если с является буквой или цифрой, и false в других случаях
isalpha(c) возвращает значение true, если с является буквой, и false в других случаях

 

продолжение табл. 3

isdigit(c) возвращает значение true, если с является цифрой, и false в других случаях
islower(c) возвращает значение true, если с является буквой нижнего регистра, и false в других случаях
isupper(c) возвращает значение true, если с является буквой верхнего регистра, и false в других случаях
isspace(c) возвращает значение true, если с является пробелом, и false в других случаях
toupper(c) если символ с, является символом нижнего регистра, то функция возвращает преобразованный символ с в верхнем регистре, иначе символ возвращается без изменений.
strchr(s,c) поиск первого вхождения символа св строке s.В случае удачного поиска возвращает указатель на место первого вхождения символа с.Если символ не найден, то возвращается ноль.
strcspn(s1,s2) определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2
strspn(s1,s2) возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2
strprbk(s1,s2) Возвращает указатель первого вхождения любого символа строки s2 в строке s1
atof(s1) преобразует строку s1 в тип double
atoi(s1) преобразует строку s1 в тип int
atol(s1) преобразует строку s1 в тип long int
getchar(с) считывает символ ссо стандартного потока ввода, возвращает символ в формате int
gets(s) считывает поток символов со стандартного устройства ввода в строку sдо тех пор, пока не будет нажата клавиша ENTER

 

Задание

1. Составить блок-схему алгоритма и программу в соответствии с заданным вариантом.

2. Составить отчет о проделанной работе (аналогично отчету для лабораторной работы №1)

 

Пример выполнения работы

Условие: Поменять порядок символов, расположенных между первой и последней точкой, на обратный.

 

#include <windows.h>

#include <wincon.h>

#include <stdio.h>

#include<stdlib.h>

char* srev(char* str);

 

void main()

{

SetConsoleOutputCP(1251);

char str[50]="In.for mat i.ka ";

puts(str);

srev(str);

puts(str);

}

/*

Функция меняет в строке str порядок символов, расположенных между первой и последней точкой, на обратный.

*/

char* srev(char* str)

{

char* first,*last;

first=strchr(str,'.'); //Адрес первой точки

last=strrchr(str,'.'); //Адрес последней точки

//Если точек нет или она одна, строку не меняем:

if (first==NULL || first==last)

return str;

//На время “обрезаем” строку:

*last='\0';

strrev(first+1);

//Восстанавливаем последнюю точку:

*last='.';

return str;

}

 

Задания для самостоятельного выполнения

1. Определить, содержит ли текст символы, отличные от малых латинских букв и пробела.

2. Выяснить, является ли заданный текст идентификатором.

3. Если в тексте нет символа * , то оставить этот текст без изменения, иначе каждую из малых латинских букв, предшествующих первому вхождению символа *, заменить на цифру 3.

4. Если в тексте нет символа + , то оставить этот текст без изменения, иначе каждую из цифр, предшествующих первому вхождению символа +, заменить символом -.

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

6. Подсчитать количество русских гласных букв в последнем слове текста.

7. Подсчитать количество цифр в первом слове текста.

8. В каждом из слов текста заменить первую букву звездочкой.

9. Первое слово текста заменить тремя звездочками.

10. Последнее слово текста заменить тремя звездочками.

11. Заменить каждую цифру, расположенную между первой и последней точкой, символом ‘*’.

12. Пусть первая часть текста есть все символы, расположенные до первого встретившегося пробела. Вторая часть - все остальные. Поменять местами первую и вторую части текста.

13. Даны две строки. Вставить все символы второй строки в первую строку, поместив их после символа с заданным индексом.

14. Даны две строки. Если первое слово одной строки совпадает с первым словом другой строки, то удалить первое слово той строки, длина которой больше. Иначе оставить строки без изменения.

Контрольные вопросы

1. Указать, какие операции можно выполнять над символьными данными.

2. Указать способ описания символьных данных.

3. Назвать специальные функции, используемые для обработки символьных данных.

4. Для чего используется тип данных char.

5. При инициализации для строки допустимо ли не задавать объём выделяемой памяти.

6. Какие операции можно использовать для работы с типом данных char.

7. Что означает символ '\0'.

 

 







Дата добавления: 2014-11-10; просмотров: 1566. Нарушение авторских прав; Мы поможем в написании вашей работы!


Рекомендуемые страницы:


Studopedia.info - Студопедия - 2014-2021 год . (0.006 сек.) русская версия | украинская версия