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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Преобразовать последовательность по правилу http://www.cyberforum.ru/cpp-beginners/thread388230.html
Даны целые числа а1,а2, ..., аn и b1, b2, ... bn. Преобразовать последовательность b1, b2, ... bn по правилу: если a1<=0, то b1 увеличить в 10 раз, иначе b1 заменить нулем i=1,n.
C++ Строки и русский алфавит В проге считываешь с файла строку на кириллице. Например: "ололо", длину выведет 10. Почему? А как тогда со строкой, как с массивом в этом случае работать? temp.erase(5,6) надо последний... http://www.cyberforum.ru/cpp-beginners/thread388228.html
C++ как слинковать curses?
Столкнулся с такой проблемой, надо было использовать _getch(), оказалось что под Linux не используется conio.h и надо подключать библиотеку curses (в которую вроде как conio.h входит полностью) но ни...
Вычислить C++
x=arccos((П-z)/3)+exp; z=sqrt(abs(y+sin(y)*sin(y))); y=0.3*lg(e[h^()-2.3)
C++ структура элементов программ. http://www.cyberforum.ru/cpp-beginners/thread388209.html
Здравствуйте, мне задали самостоялку по информатике, я не пойму что от меня требуют... Вопрос : структура елементов программ... Про что мне писать не пойму... По теме С++.
C++ Поиск одинаковых элементов в бинарном дереве. Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента. Вывести на экран все одинаковые элементы в порядке возрастания значений.Весь день мучаюсь,помогите если не... подробнее

Показать сообщение отдельно
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255

Вычисления суммы элементов массива с явной специализацией (тип 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru