• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Действия над указателями

  • Автор темы Again
  • Дата начала
A

Again

Задача 1. Составить функцию rightpos, которая получает два параметра str1 и str2, что являются строками символов и возвращает позицию последнего вхождения str2 в str1, например, rightpos ("Missisipi", "si") возвращает 6.

Задание 2. Дано одномерный массив целых чисел, написать функцию, которая упорядочивает элементы массива по убыванию модулей( abs() ) значений элементов и изымает те элементы, которые повторяются (встречаются более одного раза).
 
R

Rififi

2.

C++:
#include <algorithm>
#include <functional>
#include <locale>
#include <iostream>
#include <iterator>

/*
Дано одномерный массив целых чисел, написать функцию, которая упорядочивает элементы массива по убыванию модулей( abs() ) значений элементов и изымает те элементы, которые повторяются (встречаются более одного раза). 
*/

template <typename T, template <typename> class op>
struct X : public std::binary_function<T, T, bool>
{
bool operator()(const T& v1, const T&v2) const
{
return op<T>()(abs(v1), abs(v2));
}
};

template <typename T, size_t N>
void apply(T (&arr)[N])
{
std::sort(arr, arr+N, X<T, std::less>());
T* end = std::unique(arr, arr+N, X<T, std::equal_to>());
std::copy(arr, end, std::ostream_iterator<T>(std::cout, " "));
}

int main()
{
setlocale(LC_ALL, "");

int arr[] = {10,9,-9,-8,8,-7,7,-6,6,-5,5,-4,4,-3,3,2,-2};
apply(arr);

return 0;
}

Вывод программы:

2 -3 -4 -5 -6 -7 -8 9 10
 
I

ierofant

1.
C++:
int rightpos (char *_str1, char *_str2)
{
int len1 = strlen (_str1), len2 = strlen (_str2), pos = -1;
char str [len2 + 1];

for (int i = len1 - len2; i >= 0; i--)
{
snprintf (str, sizeof str, "%s", _str1 + i);
if (!strcmp (str, _str2))
{
pos = i + len2;
break;
}
}
return pos;
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!