|
|||||
Пермский национальный исследовательский
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования Пермский национальный исследовательский политехнический университет Кафедра «Информационные технологии и автоматизированные системы» Отчет Лабораторная работа № 6 "Символьная информация и строки"
Выполнил: студент группы РИС-16-1б Чирков Михаил Сергеевич Проверил: Доцент кафедры ИТАС Полякова О.А.
Содержание отчета 1. Символьная информация 2. Строки 3. Основные библиотечные функции для работы со строками. 4. Примеры
Символьная информация.
Для символьных данных в С++ введен тип char. Для представления символьной информации используются символы, символьные переменные и текстовые константы.
Объявление символьных переменных: char symbol = 'a';
Ввод символа с клавиатуры: char symbol; cout << "Введите символ"; cin>> symbol; cout << "Введенный символ" << symbol;
Если просто присвоить числовое значение без апострофов, то будут выводится символы по таблице ASCII. Например:
char a=3; cout << a;
На экране будет выведен символ ♥.
Присваивание значений символьным переменным: 1. Классы ввода вывода cin и cout. char s; s='y' cout << s;
2. Функции (методы) getchar() и putchar().
Функция getchar() получает один символ с клавиатуры и передает его выполнению программы. Функция putchar() получает один символ из программы и выводит его на экран char symbol; symbol = getchar(); putchar(symbol); или char symbol; putchar (getchar());
3) Метод cin.get().
Метод cin.get() cчитывает символ с клавиатуры и передает его выполнению программы. char a; cout << "Введите символ:"; cin.get(a); //a = cin.get(); cout << "Введенный символ: " << a;
Строки.
Строки в С++ - это массив символов (элементов типа char), заканчивающийся НУЛЬ-СИМВОЛОМ - '\0' (нуль терминатором), т.е. количество элементов в этом массиве на один больше чем изображение строки.
"A" 'A' Строка (2 байта) Символ (1байт)
Резервирование памяти под строки.
Статически: char s[10]; // [10] - это размер массива, в строке 9 символов, 10 под нуль-терминатор. Динамически: char *s= new char [10]
Инициализация строк.
Присвоить значение строке с помощью обычного оператора присваивания нельзя. Можно присвоить значение строке, помесив её в массив. char s1[10] = "Привет"; char s2[] = "Hello"; char s3[] = { 'P', 'r', 'i', 'v', 'e', 't' }; cout <<s1<<" "<< s2<<" "<<s3;
Указатели на строки.
Оператор char *str = "Vasia"; создает не строковую переменную, а указатель на строковую константу, изменить которую невозможно.
Ввод-вывод строк.
1.Классы ввода вывода cin и cout.
Cin считывает строку введенную с клавиатуры до первого пробела. const int n=80; char s[n]; cin>>s; cout <<s;
2. Метод cin.getline().
Если требуется ввести строку из нескольких слов в одну переменную, используется метод getline, объектом которого является cin. После имени объекта ставится точка.
const int n=80; char s[n]; cin.getline (s,n); cout << s<< endl;
3. Функции gets() и puts().
char s[80]; gets(s); // считывает символ с клавиатуры puts(s);// выводит строку на экран.
Основные библиотечные функции для работы со строками.
Несколько основных библиотечных функций. Обязательно подключаем библиотеку string.
1) Вычисление длины строки: функция strlen();
char str[]="ABCD"; int i; i=strlen(str); cout << i;
2)Копирование строк из одной в другую: функция strcpy(s1,s2) - копирует символы строки s2 в строку s1. Функция strncpy(s1,s2,n) - копирует первые n символов строки s2 в строку s1.
Примеры:
char a[100] = "ABCD"; char *p=new char [100]; strcpy (p,a); cout << p;
char a[100] = "ABCD"; char *p=new char [100]; strncpy (p,a,strlen(a)+1); // копируем всю строку cout << p; Конкатенация (сложение) строк: функция strcat(s1,s2) - складывает строку s2 со строкой s1 в одну.
Пример: Строку инициализировать с помощью функции strcpy() и дополнить её используя функцию strcat().
char s[90]; strcpy(s, "Для продолжения нажмите"); strcat(s. "любую клавишу"); cout<<s;
ПРИМЕРЫ:
1) Определение позиции символа С в строке S используя функцию strchr(s,c), которая возвращает указатель на найденное вхождение символа.
#include<iostream> #include<cstring> using namespace std; int main() { char s[100]="Privet kak dela"; char *c; c =strchr(s, 'a'); // Присваиваем строку после первого вхождения это будет ak dela while(c!=0) { cout << c-s+1; // РАЗНОСТЬ СТРОК, покажет номер местонахождения символа в строке c=strchr(c+1, 'a'); // Присваиваем строку после следующего вхождения это будет a } return 0; }
\\ на экране будет 9 и 15.
2) Поиск подстроки: Написать программу которая определяет, встречается ли в заданном текстовом файле заданная последовательность символов(подстрока). Алгоритм решения: 1. Построчно считывать текст из файла. 2.Для каждой строки проверять, содержится ли в ней заданная последовательность. 3. Если да, то напечатать сообщение о наличии заданной последовательности и завершить программу. 4. При нормальном выходе из цикла напечатать сообщение об отсутствии заданной последовательности и завершить программу.
#include <fstream> #include<iostream> #include<cstring> using namespace std; int main(); { const int len=91; char word[len], line[len]; cout << "Введите слово для поиска"; cin >> word; ifstream fin("text.txt"); if (!fin) { cout << "Ошибка открытия файла."; return 1; } while (fin.getline(line,len)) { if(strstr(line, word)) { cout << "Присутствует!"; return 0; } cout << " Отсутствует!"; }
3) Переворот строки.
#include <stdio.h> #include<string.h> int main() { char c, s[10]; int i; cout << "Введите строку:"; gets(s); for (i=0; i <= (strlen(s)-1)/2; i++) { c=s[i]; s[i]=s[strlen(s)-i-1]; s[strlen(s)-i-1]=c; } cout << "Перевернутая строка:<<endl; puts(s); return0; }
Результаты решения задач.
1) Определение позиции символа С в строке S 2) Поиск подстроки 3) Переворот строки
|
|||||
|