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

Вычисления суммы элементов массива с явной специализацией (тип char*) - C++

Восстановить пароль Регистрация
 
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 19:52     Вычисления суммы элементов массива с явной специализацией (тип char*) #1
Здравствуйте!

Помогите найти сумму элементов массива с явной специализацией (тип char*)!

Это должна быть шаблонная функция!

Благодаря уважаемому Jupiter мне(ему) удалось найти максимальный элемент массива с явной специализацией!

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "iostream"
#include "fstream"
 
using namespace std;
 
template<int n, typename T>
void InitMas(T *mas)      //передача массива
{  
    for(int i = 0; i < n; ++i)
    {
        cout << mas[i] << " "; 
    }
}
 
template <typename T>
T minimum(T *mas, int n )
{
  T min = mas[0];
  for ( int i = 1; i < n; ++i )
  {
      if ( mas[i] < min )
      {
           min = mas[i];
       }
  }
  return min;
}
 
template <typename T> 
T maximum(T* mas, int n)
{
    T max = mas[0];
    for (int i = 1; i < n; ++i )
    {
        if ( mas[i] > max )
            max = mas[i];
    }
    return max;
}
 
template<>
 char* maximum<char*>( char **mas, int n)
{
    char *max = mas[0];
    int max_len = strlen(mas[0]);
    for ( int i = 1; i < n; ++i )
    {
        int len = strlen(mas[i]);
        if ( len > max_len )
        {
            max = mas[i];
            max_len = len;
        }
    }
    return max;
}
 
 
int main()
{
    setlocale(LC_CTYPE,"Russian"); //русский шрифт в консоле
 
    char *ch; //указатель на динамический символьный массив, для записи строки с файла CharMass.txt
    const int k = 100; 
    ch = new char [k]; //выделяем память под массив
 
    ifstream inarray("CharMass.txt"); // открытие файла для ввода;
    if (!inarray) //если файла не существует
    {
        cout << "File can not be opened" << endl; //выводим сообщение
        return 0;   //выход из программы
    }
    
    inarray.getline(ch, k, EOF);//считываем с файла в массив
    
    inarray.close(); //закрываем файл CharMass.txt
 
    char *words[100] = {0};
           int nW = 0;
 
           words[nW] = strtok(ch, " ");
 
        while (words[nW] != NULL)
        {
                nW++;                                
                words[nW] = strtok( NULL, " ");
        }
 
    cout << endl;
 
    cout << maximum(words, nW);
    
    cin.get();
    return 0;
}
Вот спустя два дня решил найти сумму с явной специализацией, под суммой нужно понимать соединение все строк массива!


Спасибо!

Не по теме:

и понятия не имел что не знаю как работать с символьными массивами



Добавлено через 18 часов 31 минуту
Как вариант сделал так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <typename T> 
T sum(T* mas, int n)
{
    T *sum;
    for (int i = 1; i < n; ++i )
    {
        sum = mas[i];
    }
    return sum;
}
 
template <>
char* sum<char*>(char **mas, int n)
{
    char *sum;
    for (int i = 1; i < n; ++i )
    {
          sum = mas[i];
    }
    return sum;
}
но в массиве *sum остается только последний элемент передаваемого массива, но я то в прочем и понятно!

C++
1
sum += mas[i];
так сделать нельзя с логических розмышлений! Нужна помощь или подсказки как найти сумму(соеденить) все элементы символьного массива??

Добавлено через 40 минут
Все сделал! спасибо всем за внимание!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
T sum(T* mas, int n)
{
    T sum = mas[0];
    for (int i = 1; i < n; ++i )
    {
          strcat(sum, mas[i]);
    }
    return sum;
}
 
template <>
char* sum<char*>(char **mas, int n)
{
    char *sum = mas[0];
    for (int i = 1; i < n; ++i )
    {
          strcat(sum, mas[i]);
    }
    return sum;
}

Оказалась элементарщина!)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 19:52     Вычисления суммы элементов массива с явной специализацией (тип char*)
Посмотрите здесь:

Вычисления максимального элемента массива с явной специализацией для строк C++
[C++] Шаблонная функция с явной специализацией не возвращает динамический массив C++
C++ Массив: Написать функцию вычисления суммы элементов массива
Написать функцию вычисления суммы элементов массива C++
C++ В чем разница между явной специализацией и инстанциацией?
C++ Написать программу ввода в массив 6x5 элементов чисел и вычисления суммы элементов полученного массива
C++ Неправильно считает функцию вычисления суммы элементов массива
Рекурсия для вычисления суммы элементов массива по условию C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
03.12.2011, 21:35  [ТС]     Вычисления суммы элементов массива с явной специализацией (тип char*) #2
Предложенный мною раннее вариант нахождения суммы элементов массива с явной специализацией (тип char*) работает!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
T sum(T* mas, int n)
{
    T sum = mas[0];
    for (int i = 1; i < n; ++i )
    {
          strcat(sum, mas[i]);
    }
    return sum;
}
 
template <>
char* sum<char*>(char **mas, int n)
{
        char *sum = mas[0];
    for (int i = 1; i < n; ++i )
    {
                  strcat(sum, mas[i]);
    }
    return sum;
}

Но получается что мы эту сумму храним в массиве!

C++
1
char *sum
Каким образом можно переделать что бы сумма хранилась, так сказать, в отдельной переменной???

Что бы можно было занести эту сумму в другой массив, например в конец массива??

То есть взяли мы эту сумму и вставили в какой либо другой массив, как то так!))

Спасибо!
Миниатюры
Вычисления суммы элементов массива с явной специализацией (тип char*)  
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
03.12.2011, 22:47  [ТС]     Вычисления суммы элементов массива с явной специализацией (тип char*) #3
Ну или как вариант, как мне добавить эту сумму в конец динамического массива??

Делаю так

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
template <typename T> 
T sum(T* mas, int n)
{
    T sum = mas[0];
    for (int i = 1; i < n; ++i )
    {
         sum += mas[i];
    }
    return sum;
}
 
template <>
char *sum<char*>(char **mas, int n)
{
    char *sum = mas[0];
    for (int i = 1; i < n; ++i )
    {
          strcat(sum, mas[i]);
    }
    return sum;
}
 
template <typename T> 
T *DynMass(T *mas, int n)
{
   T *dynamic = new T [n + 2]; //динамический масив
   
   for (int i = 0; i < n; i++)
   {
      dynamic[i] = mas[i]; 
   }
   dynamic[n] = maximum(mas, n); //тут добавляю максимальный элемент тип int в конец массива 
   dynamic[n + 1] = sum(mas, n); //добавляю сумму элементов после максимального 
 
   delete [] mas;
 
   return dynamic;
}
 
template <> 
char **DynMass<char*>(char **mas, int n)
{
    char **dynamic = new char *[n + 2]; //динамический масив
    for(int i = 0; i < n; i++)
    {
        dynamic[i] = mas[i];
    }
    dynamic[n] = maximum(mas, n); //тут добавляю максимальный элемент тип char* в конец массива
      dynamic[n + 1] = sum(mas, n); //вот так не добавляется сумма элементов типа char* в конец массива
 
    return dynamic;
}

Как поступить с char*???
Yandex
Объявления
03.12.2011, 22:47     Вычисления суммы элементов массива с явной специализацией (тип char*)
Ответ Создать тему
Опции темы

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