Форум программистов, компьютерный форум CyberForum.ru

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++

Восстановить пароль Регистрация
 
VergilYamato
0 / 0 / 0
Регистрация: 22.08.2014
Сообщений: 38
22.08.2014, 23:39     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #1
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес наибольшей строки (Стивен Прата - "Язык программирования с++", 8 глава, часть 6 задания).
Судя по выводу, функция возвращает не адрес, а саму строку. Почему не работает и как сделать правильно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<cstring>
 
template<typename T> 
int maxn (const char* ar,int n)
{
 
    char max_elem[10];
    int address;
 
    strcpy(max_elem,ar[0]);
 
    for(int i=1;i<n;i++)
        if ( strcmp(ar[i],max_elem)<=0 ) address=i;
        
return &ar[address];
}
 
int main()
{
    int n=4;
    const char* ar3[]={"max","djfk","jsjs","sgad"};
 
    std::cout << "& max of ar3 = " << maxn(ar3,n) << ", 1 elem of max in ar3 is " << *(maxn(ar3,n)) << "\n";
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 23:39     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Посмотрите здесь:

C++,шаблон,специализация,поиск самой большой строки в массиве указателей на char C++
C++ по поводу указателей. Как правильно задавать массив указателей и его удалять?
Вектор строк и массив указателей на тип char C++
C++ Как удалить массив указателей char*
C++ Шаблон структуры данных - массив указателей на заголовки списков
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
22.08.2014, 23:58     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #2
у тебя функция возвращает int, а не адрес...а еще бесполезный шаблон над функцией, если его удалить ничего не изменится
EVP
314 / 236 / 41
Регистрация: 14.12.2010
Сообщений: 457
23.08.2014, 12:23     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #3
Цитата Сообщение от VergilYamato Посмотреть сообщение
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес наибольшей строки (Стивен Прата - "Язык программирования с++", 8 глава, часть 6 задания).
В общем виде так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "stdafx.h"
 
#include <iostream>
#include <assert.h>
 
template<typename T, int N>                         // <<<---- задаём тип и размер массива
const T* findLongestString(const T*(& _strs)[N])    // <<<---- принимаем массив по ссылке
{
    size_t maxLength = 0;
    const T* maxStr = NULL;
    for (size_t i = 0; i < N; ++i)                  // <<<---- перебираем все строки
    {
        const T* curStr = _strs[i];
        size_t curLength = 0;
        while (curStr[curLength] != 0)
            ++curLength;
        if (maxLength < curLength)                  // <<<---- находим самую длинную строку
        {
            maxLength = curLength;
            maxStr = curStr;
        }
    }
    assert(maxStr != NULL);                         // <<<---- на всякий случай проверяем результат
    //std::cout << maxLength << std::endl;
    return maxStr;
}
 
int main()
{
    const char* strs[] = { "0", "11", "222", "3333", "end" };
    std::cout << "longest string is: " << findLongestString(strs) << "." << std::endl;
    return 0;
}
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,546
23.08.2014, 12:34     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #4
Цитата Сообщение от VergilYamato Посмотреть сообщение
Почему не работает
Цитата Сообщение от VergilYamato Посмотреть сообщение
функции, принимающей массив указателей на char
Параметр - массив указателей на char.
C++
1
2
 ... F ( char* ar[], ... );
 ... F2 ( char** ar, ... );
Здесь параметр - массив char.
C++
1
2
 ... G ( char*ar, ... );
 ... G2 ( char ar[], ... ); //  char* ar  эквивалентно  char ar[]
VergilYamato
0 / 0 / 0
Регистрация: 22.08.2014
Сообщений: 38
25.08.2014, 20:17  [ТС]     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #5
У меня вроде массив строк, это разве не то же самое, что и массив указателей на char?

Добавлено через 1 минуту
Зачем ты подключаешь stdafx, и что там?
EVP
314 / 236 / 41
Регистрация: 14.12.2010
Сообщений: 457
26.08.2014, 09:32     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #6
Цитата Сообщение от VergilYamato Посмотреть сообщение
У меня вроде массив строк, это разве не то же самое, что и массив указателей на char?
Не одно и тоже.
Массив сохраняет количество элементов, а указатель теряет размерность массива.

Цитата Сообщение от VergilYamato Посмотреть сообщение
Зачем ты подключаешь stdafx, и что там?
Это примочка от Visual Studio. В остальных компиляторах stdafx.h не нужен.
//Забыл убрать в коде первую строчку: #include "stdafx.h"
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,546
26.08.2014, 19:50     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #7
Цитата Сообщение от VergilYamato Посмотреть сообщение
У меня вроде массив строк
Цитата Сообщение от VergilYamato Посмотреть сообщение
C++
1
char* ar
Параметр char* ar, это то же самое, что char[], массив char. Этот массив содержит только одну строку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2014, 17:38     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Еще ссылки по теме:

Передача двумерного массива указателей на char в качестве параметра функции C++
C++ Виртуальные функции (создать массив указателей на объекты трех классов)
Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
orange_fox
 Аватар для orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
27.08.2014, 17:38     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей #8
Что непонятно - спрашивай:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cstring>
 
using namespace std;
 
char* longestCSTR(char* cstrArray[], size_t cstrCount)
{
    size_t longestIndex = 0;
    for (size_t i = 1; i < cstrCount; ++i)
    {
        if (strlen(cstrArray[i]) > strlen(cstrArray[longestIndex]))
            longestIndex = i;
    }
    return cstrArray[longestIndex];
}
 
int main()
{
    char* Array[] = { 
        "Hello, world!",
        "lorem ipsum dolor sit amet",
        "42",
        "you are null and void",
        "" 
    };
    cout << longestCSTR(Array, 5) << endl;
    cin.get();
}
Yandex
Объявления
27.08.2014, 17:38     Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Ответ Создать тему
Опции темы

Текущее время: 04:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru