31-36 вопрос
.docx-
Алгоритм поиска максимального элемента матрицы и его индексов. Реализация алгоритма на языке С/C++.
1) отсортировать массив(пройтись последовательно по каждому элементу массива и выкинуть из него повторяющиеся(точнее создать новый массив и скопировать в него неповторяющиесяв новом массиве осуществить элементарный поиск максимального элемента 2) несортируя массив ищем максимальный(предполагая, а вдруг он будет в единственном экземпляре; в цикле ищем дубликаты(все) найденного значения и каким то образом исключаем их из массива; в оставшемся массиве опять ищем максимальный и все повторяем
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int i, j, n, m, mi(0), mj(0);
cout<<"Vvedite n: ";
cin>>n;
cout<<"Vvedite m: ";
cin>>m;
cout<<"Vvedite massiv:";
int** mas = new int* [n];
for(i = 0; i < n; ++i)
{
mas[i] = new int [m];
for(j = 0; j < m; ++j)
cin>>mas[i][j];
}
for(i = 0; i < n; ++i)
for(j = 0; j < m; ++j)
if(mas[i][j] > mas[mi][mj])
mi = i, mj = j;
cout<<"Max - mas["<<mi<<"]["<<mj<<"] = "<<mas[mi][mj];
cin.get();
cin.get();
system ("pause");
return 0;
}
32.Символы. Привести примеры обработки символов с использованием библиотечных функций на языке С/C++.
Функция ввода символов
Для ввода символов может использоваться функция
char getchar();
которая возвращает значение символа, введенного с клавиатуры.
Функция вывода символов
Для вывода символов может использоваться функция
char putchar(char);
которая возвращает значение выводимого символа и выводит на экран символ, переданный в качестве аргумента.
(пример)Посчитать количество введенных символов во введенной строке.
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "");
char input[256];
cout<<"Введите строку: ";
cin>> input;
cout <<"Строка"<<input<<"содержится"<<strlen(input)<<"символов \n";
system ("pause");
return 0;
}
33.Символьные строки. Два эквивалентных способа объявления и инициализации строк. Привести примеры обработки строк в С/C++.
Объявление и инициализация строк. Строкой называется массив символов, который заканчивается пустым символом ‘\0’. Строка объявляется как обычный символьный массив, например,
char s1[10];
char *s2; // указатель на строку Различие между указателями s1 и s2 заключается в том, что указатель s1 является именованной константой, а указатель s2 – переменной.
Строковые константы заключаются в двойные кавычки в отличие от символов, которые заключаются в одинарные кавычки. Например, “This is a string.” Длина строковой константы не может превышать 509 символов по стандарту.. При инициализации строк размерность массива лучше не указывать, это выполнит компилятор, подсчитав длину строки и добавив к ней единицу. Например, char s1[ ] = “This is a string.”;
#include <string> . . . . . { getline(cin,stroka);(ввод строки с клавы) n=stroka.lenght(); (считает колл символов в строке)
34.Библиотечные функции языка С/C++ для работы со строками и символами. Привести примеры обработки строк с использованием библиотечных функций.
Функции для работы со строками объявлены в заголовочном файле string.h. Приведем некоторые из них:
char *strcpy(char *dest, const char *src);
копирует второй аргумент в первый. Возвращает указатель на копию. Память для dest должна быть заранее зарезервирована.
char *strdup(const char *s);
копирует строку во вновь создаваемую функцией malloc() область памяти. Возвращает указатель на созданную копию или 0 при неудаче. Программист ответственен за освобождение памяти функцией free();
size_t strlen(const char *s);
подсчитывает размер строки. Возвращает количество символов строки без нулевого символа. Тип size_t определен в файле string.h и других заголовочных файлах как целое без знака: typedef unsigned size_t;
char *strcat(char *dest, const char *src);
присоединяет вторую строку к первой. Возвращает указатель на начало нарощенной строки.
char *strchr(const char *s, int c);
сканирует строку s в поисках первого вхождения заданного символа с. Нулевой символ можно искать наряду с другими. Возвращает указатель на найденный символ или 0, если символа нет.
char *strrchr(const char *s, int с);
то же, что strchr, но находит последнее вхождение символа с в строку s.
char *strstr(const char *s1, const char *s2);
находит первое вхождение подстроки s2 в строку s1. Возвращает указатель на место первого вхождения или 0, если такового нет.
int strcmp(const char *s1, const char*s2);
сравнивает две строки. Возвращает целое меньше нуля, если s1 < s2, равное нулю, если s1 == s2, и большее нуля, если s1 > s2.
char *strpbrk(const char *s1, const char *s2);
сканирует первую строку в поисках первого вхождения любого символа из второй строки. Возвращает указатель на найденный символ или 0 при неудаче.
char *strtok(char *s1, const char *s2);
сканирует первую строку в поисках первого участка, не содержащего символов из s2.
-
Алгоритмы копирования строк, реализованные через массивы и стандартные строковые функции языка С/C++.
strcpy() (от слова copy – копирование)
Реализуем копирование одной строки и её вставку на место другой строки.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char someText1[64] = "Сaйт purecodecpp.com!";
char someText2[] = "Основы С++";
cout << "Строка someText1 - \"" << someText1 << "\" \n";
cout << "Строка someText2 - \"" << someText2 << "\" \n\n";
int count = 0;
while (true) // запускаем бесконечный цикл
{
someText1[count] = someText2[count]; // копируем посимвольно
if (someText2[count] == '\0') // если нашли \0 у второй строки
{
break; // прерываем цикл
}
count++;
}
cout << "Строка someText1 после копирования someText2 -\n\"" << someText1 << "\" \n\n";
return 0;
}
36.Функции поиска одиночного символа и подстроки в строке. Проиллюстрировать работу функций в С/C++ на примерах.
char *s
char c
char *strchr (s,c)
поиск первого вхождения символа (с) в строке (s) В случаи удачного поиска возвращает указатель на место первого нахождения символа (с) а если не находит то возвращает NULL(пустой указатель)
char *s1,*s2
char *strstr(s1,s2)
функция ищет в строке s1 подстроку s2 и возвращает на нее указатель или NULL если не найдено