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

Тема в разделе "C/C++/C#", создана пользователем Again, 21 дек 2010.

  1. Again

    Again Гость

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

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

    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
     
  3. ierofant

    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;
    }
     
Загрузка...

Поделиться этой страницей