Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_10_Строки.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
171.01 Кб
Скачать

Пример 4.

Задача. Дана строка символов, подсчитать сколько раз среди символов строки встречается буква x.

#include <iostream.h>

void main( void )

{

char str[100]; // объявление строки символов

cout<<"\nVvedite stroky: "; // просим пользователя ввести строку символов

cin >> str; // считываем строку, введенную пользователем

int count = 0; /* объявление переменной-счетчика, в которой

будем хранить количество вхождений х в строку */

int i = 0;

while(str[i]!='\0')

{

if (str[i]=='x') count++;

i++;

}

cout<<"\n Simvol x vxodit v stroky –"<<count; // выводим результат на экран

}

Пример 5

Задача. Написать программу, которая получает от пользователя набор символов, исключая пробел, и удаляет из этого набора все вхождения символов S и s.

Наибольший интерес представляет анализ строки. Для реализации этого анализа нужно поэлементно двигаться от нулевого индекса массива к последнему и делать проверку каждого элемента. Если будет встречен такой элемент с индексом i, то нам нужно сместить все элементы с индексами, большими чем i, на один индекс меньше. Другими словами:

Пускай дана следующая строка: A b s D e f

0 1 2 3 4 5 ------ индексы

Проверяя поиндексно каждый элемент массива, видим, что 2 элемент массива и есть искомый символ. Тогда, нужно сместить каждый элемент массива на 1 индекс меньше, т.е. получить следующий результат: A b D e f

0 1 2 3 4

#include <iostream.h>

void main()

{

const int CharCount=10; //зададим размерность массива через константу

char arr[CharCount]; //объявление символьного массива

//Предупредим пользователя, что ввод ограничен размерностью массива

cout<<"\nVvedite stroky, no ne bolee, chem "<<CharCount-1<<" simvolov\n";

cin >> arr; // ввод строки

int i=0;

while (arr[i]!='\0') //Цикл работает пока не встретится признак конца строки

if (arr[i]=='S'||arr[i]=='s') //Проверка на наличие искомого символа

{ /*Если это искомый символ, то перенесем оставшуюся часть строки

на один элемент левее.*/

for (int j=i;arr[j]!='\0';j++)

arr[j]=arr[j+1];

}

else i++; //а если это не искомый символ, то будем двигаться по строке дальше

cout<<endl<<arr<<endl; //вывести результат

}

Замечание к задаче. Как Вы думаете, что произойдет, если в программу ввести строку содержащую пробелы (т.е. нарушить условия задачи)?

Пример 6

Задача. Написать программу сравнения двух строк.

Перед тем как перейти непосредственно к программе, сделаем примечание. В некоторых случаях желательно вводить в массив полную строку текста. С этой целью C++ снабжен функцией cin.getline(s). Функция cin.getline(s) требует три аргумента – массив символов, в котором должна храниться строка текста, длина и символ ограничитель. Например, фрагмент программы

char sentence[80];

cin.getline(sentence, 80, '\n');

объявляет массив sentence из 80 символов, затем считывает строку текста с клавиатуры в этот массив. Функция прекращает считывание символов в случаях, если встречается символ-ограничитель '\n', если вводится указатель конца файла или если количество считанных символов оказывается на один меньше, чем указано во втором аргументе (последний символ в массиве резервируется для завершающего нулевого символа). Если встречается символ ограничитель, он считывается и отбрасывается. Третий аргумент cin.getline(s) имеет '\n' в качестве значения по умолчанию, так что предыдущий вызов функции мог быть написан в следующем виде:

cin.getline(sentence, 80);

#include<iostream.h>

#include<string.h>

void main()

{

int len; // длина вводимой строки

char s[81]; // место хранения вводимой строки

char *s1,*s2;

cout<<"Vvedite pervyyu stroky: ";

cin.getline(s, 80); // ввод первой строки

len = strlen(s); // определение длины строки

s1 = new char[ len + 1]; // динамическое выделение памяти под строку s1

strcpy(s1, s); // копирование введенной строки в строку s1

cout<<" Vvedite vtoryyu stroky: ";

cin.getline(s, 80); // ввод второй строки

len = strlen(s);

s2 = new char[len + 1]; // динамическое выделение памяти под строку s2

strcpy(s2, s);

// какая из введенных строк больше?

if(strcmp(s1, s2) > 0)

cout<<"Stroka s1:\t"<<s1<<"\n\t > \n"

<< "Stroka s2:\t"<<s2<<endl;

else if (strcmp(s1, s2) == 0)

cout<<"String s1:\t"<<s1<<"\n\t=\n"

<<"String s2:\t"<<s2<<endl;

else

cout<<"String s1:\t"<<s1<<"\n\t < \n"

<<"String s2:\t"

<<s2<<endl;

delete []s1; // удаление строк из памяти

delete []s2;

}

Пример

/*Рассмотрим такую задачу: необходимо реализовать следующие функции для работы

с массивами.

1) Функция ввода элементов массива;

2) Функция распечатки массива;

3) Функция сортировки массива;

4) Функция добавления нового элемента в конец массива;

5) Функция удаления заданного элемента.

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

передача массивов в функцию, передача параметров по ссылке (чтобы изменялись

реальные данные), возврат указателя из функции.

Все данные функции часто применимы в реальной жизни, например, при создании

всевозможных справочников.*/

#include <iostream.h>

int* Add(int*, int&); // Функция добавления элемента в конец массива

int* Del(int*, int&); // Функция удаления элемента в заданной позиции

void Input(int*, int);// Функция ввода элементов массива

void Sort(int*, int); // Функция сортировки элементов массива

void Print(int*, int);// Функция распечатки элементов массива

void main() // Пример реализации

{

int n, *a;

cout<<"Vvedite razmer massiva:\t";

cin >> n; // Количество элементов массива

a = new int[n]; // Выделение памяти для массива из n элементов

Input(a, n); // Ввод элементов массива

cout<<"\nArray:\n";

Print(a, n); // Вывод массива на экран

Sort(a, n); // Сортировка массива

cout<<"Otsortirovannuj massiv:\n";

Print(a, n); // Вывод отсортированного массива на экран

a = Add(a, n); // Изменение массива - добавление нового элемента

cout<<"Novuj massiv:\n";

Print(a, n); // Вывод измененного массива

a = Del(a, n); // Изменение массива - удаление указанного элемента

cout<<" Novuj massiv:\n";

Print(a, n); // Вывод измененного массива

delete [] a; // Высвобождение памяти, отведенной под массив

}

void Input(int *a, int n)

{

for(int i = 0; i < n; i++)

{

cout<<"Element #"<<i + 1<<"\t";

cin >> a[i]; // Ввод элементов массива

}

}

void Print(int *a, int n)

{

for(int i = 0; i < n; i++)

cout<<a[i]<<" ";

cout<<endl; // Вывод элементов массива

}

void Sort(int *a, int n)

{

int temp; // Временная переменная для обмена значений

bool flag = true;// Флаг окончания сортировки

for(int j = 1; ; j++)

{

for(int i = 0; i < n - j; i++)

if(a[i] > a[i+1])

{

temp = a[i];

a[i] = a[i+1];

a[i+1] = temp;

flag = false;

}

if(flag == true)

break;

flag = true;

}

}

int* Add(int *a, int &n)

{

int i, m;

int *p = new int[++n]; // Создание временного массива большего размера

cout<<"Vvedite dobavlyaemuj element:\t";

cin >> m; // Добавляемый элемент

for(i = 0; i < n - 1; i++)

p[i] = a[i]; // Сохранение элементов

delete [] a; // Удаление старого массива

p[n - 1] = m; // Новый элемент

return p; // Возвращение адреса нового массива

}

int* Del(int* a, int &n)

{

int i, m, j = 0;

n--; // Уменьшение размерности массива

int *p = new int[n]; // Создание временного массива меньшего размера

cout<<"Element s kakim indeksom ydalim:\t";

cin >> m; // Ввод индекса удаляемого элемента (индекс с нуля)

for(i = 0; i < n; i++)

{

if(i == m)

j = 1;

p[i] = a[i+j]; // Сохранение элементов, не учитывая указанный

}

delete [] a; // Удаление массива

return p; // Возвращение адреса нового массива