Главная страница
Навигация по странице:

  • Краткие

  • Пример

  • Контрольные

  • Варианты

  • Лаб.раб. Министерство образования и науки российской федерации пензенский государственный


    Скачать 0.8 Mb.
    НазваниеМинистерство образования и науки российской федерации пензенский государственный
    Дата05.09.2022
    Размер0.8 Mb.
    Формат файлаdocx
    Имя файлаЛаб.раб.docx
    ТипМетодические указания
    #662566
    страница7 из 8
    1   2   3   4   5   6   7   8

    Лабораторнаяработа6


    Тема:"Строки"

    Цель работы: изучение правил описания, ввода-вывода и основных функций обработки символьных данных.

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

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

    В С++ существует 2 типа строк:

    1. Массив переменных типа char, заканчивающийся нуль-терминатором \0. Символьные строки состоят из набора символьных констант заключённых в двойные кавычки. При объявлении строкового массива необходимо учитывать наличие в конце строки нуль-терминатора, и отводить дополнительный байт под него.

    char string[10]; // string – имя строковой переменной, 10 – размер массива, (в строке может поместиться 9 символов, последнее место отводится под нуль-терминатор)

    1. Специальный класс string

    Для его работы необходимо в начале программы подключить заголовочный файл string: #include

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

    usingnamespacestd;

    Теперь чтоб создать строку достаточно написать: strings;

    Для записи в строку можно использовать оператор =

    s="Hello";

    Доступ к i-му элементу строки s типа string осуществляется стандартным образом s[i]. Над строками типа string определены следующие операции:

      • присваивания, например s1=s2;

      • объединения строк (s1+=s2 или s1=s1+s2) — добавляет к строке s1 строку s2, результат храниться в строке s1, пример объединения строк:

      • сравнения строк: s1=s2, s1!=s2, s1 s1>s2, s1<=s2, s1>=s2 результатом будет логическое значение.

    Существует множество функций для работы со строками (таблица 7). Таблица 7 – Функции для работы со строками

    Функция

    Объяснение

    s.append(str)

    добавляет в конец строки строку str

    s.assign(str)

    присваивает строке s значение строки str

    s.clear()

    отчищает строку, т.е. удаляет все элементы в ней

    s.compare(str)

    сравнивает строку s со строкой str и возвращает 0 в случае

    совпадение

    s.copy(C, I, N)

    копирует из строки s в строку C(может быть как строка

    типа string, так и строка типа char) I символов, начиная с N-го символа

    bool b=s.empty()

    если строка пуста, возвращает true, иначе false

    s.erase(I,N)

    удаляет N элементов с I-го символа

    s.find(str,I)

    ищет строку str начиная с I- го символа

    s.insert(pos, s1)

    вставляет строку s1 в строку s, начиная с позиции pos

    int len=s.length()

    записывает в len длину строки

    s.push_back(symbol)

    добавляет в конец строки символ

    s.replace(index,

    n,str)

    берет n первых символов из str и заменяет символы строки

    s на них, начиная с позиции index

    str=s.substr(n,m)

    возвращает m символов начиная с позиции n

    s.swap(str)

    меняет содержимое s и str местами.

    s.size()

    возвращает число элементов в строке.

    Функции для работы со строками, прототипы которых описаны в заголовочном файле string.h:

    1. Сравнение строк. Для сравнения строк используются функции strcmp и strncmp. Функция

    int strcmp ( const char *str1, const char *str2);

    лексикографически сравнивает строки str1, str2 и возвращает –1, 0 или 1, если строка str1 соответственно меньше, равна или больше строки str2.

    Функция

    int strncmp ( const char *str1, const char *str2, size_t n);

    лексикографически сравнивает не более чем n первых символов из строк str1 и str2. Функция возвращает –1, 0 или 1, если первые n символов из строки str1 соответственно меньше, равны или больше первых n символов из строки str2.

    Пример:

    // пример сравнения строк #include #include

    int main() {

    char str1[] = "aa bb"; char str2[] = "aa aa"; char str3[] = "aa bb cc";

    printf("%d\n", strcmp(str1, str3)); // печатает: -1 printf("%d\n", strcmp(str1, str1)); // печатает: -0 printf("%d\n", strcmp(str1, str2)); // печатает: 1 printf("%d\n", strncmp(str1, str3, 5)); // печатает: 0 return 1;

    }

    1. Копирование строк. Для копирования строк используются функции strcpy и strncpy. Функция

    char *strcpy ( char *str1, const char *str2 );

    копирует строку str2 в строку str1. Строка str2 копируется полностью, включая завершающий нулевой байт. Функция возвращает указатель на str1. Если строки перекрываются, то результат непредсказуем.

    Функция

    char *strncpy ( char *str1, const char *str2, size_t n );

    копирует n символов из строки str2 в строку str1. Если строка str2 содержит меньше чем n символов, то последний нулевой байт копируется столько раз, сколько нужно

    для расширения строки str2 до n символов. Функция возвращает указатель на строку str1.

    Пример:

    char str1[80];

    char str2 = "Copy string."; strcpy ( str1, str2 );

    printf ( str1 ); // печатает: Copy string.

    1. Соединение строк. Для соединения строк в одну строку используются функции strcat и strncat. Функция

    char* strcat ( char *str1, const char *str2 );

    присоединяет строку str2 к строке str1, причем завершающий нулевой байт строки str1 стирается. Функция возвращает указатель на строку str1.

    Функция

    char* strncat ( char *str1, const char *str2, size_t n );

    присоединяет n символов из строки str2 к строке str1, причем завершающий нулевой байт строки str1 стирается. Функция возвращает указатель на строку str1. если длина строки str2 меньше n, то присоединяются только символы, входящие в строку str2. После соединения строк к строке str1 всегда добавляется нулевой байт. Функция возвращает указатель на строку str1.

    Пример:
    #include

    #include int main ( )

    {

    char str1[80] = "String "; char str2 = "catenation "; char str3 = "Yes No"; strcat ( str1, str2 );

    printf ("%s\n", str1 ); // печатает: String catenation strncat ( str1, str3, 3 );

    printf ("%s\n", str1 ); // печатает: String catenation Yes return 1;

    }

    1. Поиск символа в строке. Для поиска символа в строке используются функции strchr, strrchr, strspn, strcspn и strpbrk. Функция

    char* strchr ( const char *str, int c );

    ищет первое вхождение символа, заданного параметром c, в строку str. В случае успеха функция возвращает указатель на первый найденный символ, а в случае неудачи – NULL.

    Функция

    char* strrchr ( const char *str, int c );

    ищет последнее вхождение символа, заданного параметром c, в строку str. В случае успеха функция возвращает указатель на последний найденный символ, а в случае неудачи – NULL.

    Пример:

    #include #include int main ( )

    {

    char str[80] = "Char search";

    printf ("%s\n", strchr ( str, 'r' )); // печатает: r search printf ("%s\n", strrchr ( str, 'r' )); // печатает: rch return 1;

    }

    Функция

    size_t strspn ( const char *str1, const char *str2 );

    возвращает индекс первого символа из строки str1, который не входит в строку str2.

    Функция

    size_t strcspn ( const char *str1, const char *str2 );

    возвращает индекс первого символа из строки str1, который входит в строку str2.

    Пример:

    int main ( )

    {

    char str[80] = "123 abc";

    printf ("n = %d\n", strspn ( str, "321" ); // печатает: n = 3 printf ("n = %d\n", strcspn ( str, "cba" ); // печатает: n = 4 return 1;

    }

    Функция

    char* strpbrk ( const char *str1, const char *str2 );

    находит первый символ в строке str1, который равен одному из символов в строке str2. В случае успеха функция возвращает указатель на этот символ, а в случае неудачи – NULL.

    Пример.

    char str[80] = "123 abc";

    printf ("%s\n", strpbrk ( str, "bca" )); // печатает: abc

    1. Сравнение строк. Для сравнения строк используются функция strstr.

    Функция

    char* strstr ( const char *str1, const char *str2 );

    находит первое вхождение строки str2 (без конечного нулевого байта) в строку str1. В случае успеха функция возвращает указатель на найденную подстроку, а в случае неудачи – NULL. Если указатель str1 указывает на строку нулевой длины, то функция возвращает указатель str1.

    Пример:

    char str[80] = "123 abc 456;

    printf ("%s\n", strstr ( str, "abc"); // печать: abc 456

    1. Разбор строки на лексемы. Для разбора строки на лексемы используется функция strtok. Функция

    char* strtok ( char *str1, const char *str2 );

    возвращает указатель на следующую лексему (слово) в строке str1, в которой разделителями лексем являются символы из строки str2. В случае если лексемы закончились, то функция возвращает NULL. При первом вызове функции strtok параметр str1 должен указывать на строку, которая разбирается на лексемы, а при последующих вызовах этот параметр должен быть установлен в NULL. После нахождения лексемы функция strtok записывает после этой лексемы на место разделителя нулевой байт.

    Пример.

    #include #include int main( )

    {

    char str[ ] = "12 34 ab cd"; char *p;

    p = strtok ( str, " " ); while (p)

    {

    printf ( "%s\n", p ); // печатает в столбик значения: 12 34 ab cd p = strtok ( NULL, " " );

    }

    return 1;

    }

    1. Определение длины строки. Для определения длины строки используется функция strlen. Функция

    size_t strlen ( const char *str);

    возвращает длину строки, не учитывая последний нулевой байт. Например, char str[] = "123";

    printf ("len = %d\n", strlen ( str )); // печатает: len = 3

    Пример выполнения задания.

    Задание. Найти слова во введенной с клавиатуры строке, вывести их на экран и подсчитать их количество.

    Схема программы представлена на рисунке 24:


    да










    ew=i







    strncpy(d,&s[bw],ew- bw+1)








    d[ew-bw+1]=0















    Рисунок 24
    Пример программы:

    #include #include

    vid main()

    {

    char s[100],d[100]; int i=0,j=0,bw,ew,len; gets(s); len=strlen(s); while (i
    {

    while((s[i]==' ')&&(i i++; bw=i;

    while((s[i]!=' ')&&(i i++; ew=i;

    strncpy(d,&s[bw],ew-bw+1); d[ew-bw+1]=0;

    if (bw

    { j++;

    printf("%s\n",d);}

    }

    printf("Vsego slov %d\n", j);

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



    1. Строки в языке С++: понятие строки, описание строк в программе, обращение к элементам строки.

    2. Три способа ввода строк в С++.

    3. Три способа вывода строк в С++.

    4. Способы инициализации строк (задание значений в программе).

    5. Стандартные функции для обработки строк.


    Варианты заданий
    Дана последовательность символов S1, …, SN. Группы символов, разделенные пробелом (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами.

    1. Определить число символов в самом длинном слове строки. Слова отделяются знаком “/”.

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

    3. В произвольном тексте вставить между первым и вторым словом новое слово.

    4. В произвольном тексте найти и отпечатать слова, содержащие букву Е.

    5. Отпечатать второе и третье слова произвольного текста.

    6. В произвольном тексте вставить между вторым и третьим словом новое слово.

    7. В произвольном тексте найти и отпечатать все слова длиной 5 символов.

    8. В произвольном тексте найти самое короткое слово.

    9. В последовательности из 10 пятибуквенных слов найти и поменять местами пару слов, у которых первые три буквы одного совпадают с последними тремя буквами другого.

    10. Упорядочить в алфавитном порядке последовательность из 10 пятибуквенных слов.

    11. В строке из 50 символов отдельные слова разделены пробелом. Упорядочить строку так, чтобы каждое следующее слово было не короче предыдущего.

    12. Расположить слова строки в порядке, обратным исходному.

    13. Подсчитать количество букв ‘a’ в последнем слове строки.

    14. Найти количество слов, у которых первый и последний символы совпадают между собой.

    15. Исключить из строки слова, расположенные между скобками ( , ). Сами скобки должны быть исключены.

    16. В произвольном тексте найти и отпечатать слова, содержащие букву А.

    17. Отпечатать первое и второе слова произвольного текста.

    18. В произвольном тексте вставить после первого слова новое слово.

    19. В произвольном тексте найти и отпечатать все слова длиной 4 символа.

    20. В произвольном тексте найти самое длинное слово.

    21. Выполнить сравнение двух строк s и d. Результат вывести в виде сообщения «идентичны» или «не идентичны».

    22. Добавить в конец строки новое слово, длинною 5 симвлов, иначе выдать сообщение об ошибке.

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

    24. Посчитать какое количество раз встречается буква n (задается при каждом выполнении алгоритма).

    25. Проанализировать массив символов, состоящий из n символов. Если массив состоит из n-5 символов, добавить в конец набор символов rrrrr.
    1   2   3   4   5   6   7   8


    написать администратору сайта