Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
#1

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

21.11.2011, 19:52. Просмотров 557. Ответов 2
Метки нет (Все метки)

Здравствуйте!

Помогите найти сумму элементов массива с явной специализацией (тип 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;
}

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

Вычисления максимального элемента массива с явной специализацией для строк - C++
Здравствуйте! Всех студентов с праздником! Возможно тема заезженная! Возникла такая проблемка, нужно вычислить максимальный...

В чем разница между явной специализацией и инстанциацией? - C++
В чем разница между явной специализацией и инстанциацией? Желательно, подробно.

Шаблонная функция с явной специализацией не возвращает динамический массив - C++
Здравствуйте! Возникла проблема! Есть шаблонная функция с явной специализацией для строк (тип char*), которая должна возвратить...

Составить программу вычисления и печати суммы отрицательных элементов среди четных элементов массива - C++
#include &lt;math.h&gt; #include &lt;stdio.h&gt; #include&lt;malloc.h&gt; void pech_m(float *, int, int); void f1(float *, int, int); float ...

Написать программу ввода в массив 6x5 элементов чисел и вычисления суммы элементов полученного массива - C++
Пожалуйста помогите решить!

Написать функцию вычисления суммы элементов массива - C++
1)написать функцию вычисления суммы элементов массива

2
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
03.12.2011, 21:35  [ТС] #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
Каким образом можно переделать что бы сумма хранилась, так сказать, в отдельной переменной???

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

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

Спасибо!
0
Миниатюры
Вычисления суммы элементов массива с явной специализацией (тип char*)  
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
03.12.2011, 22:47  [ТС] #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*???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2011, 22:47
Привет! Вот еще темы с ответами:

Написать функцию вычисления суммы элементов массива - C++
вот мои наработки...ошибки выдает,а я их не вижу. #include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; main() { int fun(int x); { int...

Массив: Написать функцию вычисления суммы элементов массива - C++
Написать функцию вычисления суммы элементов массива

Неправильно считает функцию вычисления суммы элементов массива - C++
Добрый день! Имеется код, но функция неправильно выводит результат. Подскажите, что неверно. #include &quot;stdafx.h&quot; #include &quot;math.h&quot; ...

Рекурсия для вычисления суммы элементов массива по условию - C++
Добрый день! Помогите пожалуйста написать программу. В программе есть данная функция: int MasX(int **A) { int x; int i, j; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru