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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

Поиск самой длинной строки в const char** - C++

18.03.2014, 16:17. Просмотров 370. Ответов 9
Метки нет (Все метки)

Здравствуйте.
Вот функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <>
char* maxn<char*>(char** const ar, const int* limit) {
    int curmax = 0, absmax = 0, max_ind = 0, count = 0;
    for (int i = 0; (i < *limit), (count = 0); ++i) {
        while (ar[i][count])
            ++count;
        cout << count; //почему не выполняется ???____
        if (count > curmax && count > absmax) { // здесь проверка на текущее максимальное в паре и абсолютное
            absmax = curmax = count;
            max_ind = i;
        }
        else if (count > curmax) // здесь только на текущее
            curmax = count;
    }
    return ar[max_ind];     
}
Не ведется подсчет правильно, оператор, что выше обозначен комментарием, не выполняется, а функция возвращает просто последнюю строчку в массиве.
Что не так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 16:17     Поиск самой длинной строки в const char**
Посмотрите здесь:

Поиск самой длинной строки в файле - C++
дана такая задача: Дан текстовый файл f. Вывести самую длинную строку файла. Если в файле имеется несколько строк с наибольшей длиной, то...

C++,шаблон,специализация,поиск самой большой строки в массиве указателей на char - C++
Есть почти готовое решение,помогите пожалуйста доделать,немного не понимаю #include &lt;cstdlib&gt; #include &lt;iostream&gt; template...

Поиск самой длинной неубывающей подпоследовательности - C++
Формулировка задачи: Реализовать на языке C или C++ алгоритм поиска для заданной числовой последовательности самой длинной неубывающей...

Нахождение самой длинной строки из массива - C++
Ввести массив строк и найти в нем максимальную по длине строку. Не учитывать случай, когда таких строк несколько. Можно самую простую...

Вывести размер самой длинной строки - C++
как вывести наибольшее кол-во символов через max не получается, и есть ли вообще такая функция &quot;max&quot; ? string a,b,c,f; cout...

Поиск самой длинной цепочки из подряд идущих одинаковых элементов в массиве - C++
Помогите пожалуйста решить программу. Если можно как можно проще используя только циклы, ветвления , массивы и переменные. Сам не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
18.03.2014, 16:23     Поиск самой длинной строки в const char** #2
Либо я плохо разбираюсь в сях либо туточки:
C++
1
    for (int i = 0; (i < *limit), (count = 0); ++i) {
должно быть так:
C++
1
    for (int i = 0; i < *limit; ++i, count = 0) {
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
18.03.2014, 16:27  [ТС]     Поиск самой длинной строки в const char** #3
Ilot, насколько я понимаю - это идентично в данном случае. Будь count = 0 в проверке цикла, либо в выполнении, компилятор все равно это выполнит...

Исправил - все равно ничего не поменялось.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,183
Завершенные тесты: 1
18.03.2014, 16:36     Поиск самой длинной строки в const char** #4
Такой цикл выполняется ноль раз.
Вычисляется count=0, а т.к. 0 - это ложь, то цикл заканчивается.
Перенесите его в тело цикла.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
18.03.2014, 16:39  [ТС]     Поиск самой длинной строки в const char** #5
Ааа...
Ну а как дальше то? Переставил в обновляемую часть - все равно так же само работает.
Цитата Сообщение от zss Посмотреть сообщение
Перенесите его в тело цикла.
Перенес:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <>
char* maxn<char*>(char** ar, const int* limit) {
    int curmax = 0, absmax = 0, max_ind = 0, count = 0;
    for (int i = 0; i < *limit; ++i) {
        count = 0;
        while (ar[i][count])
            ++count;
        cout << count;
        if (count > curmax && count > absmax) {
            absmax = curmax = count;
            max_ind = i;
        }
        else if (count > curmax)
            curmax = count;
    }
    return ar[max_ind];     
}
Все также.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
18.03.2014, 16:42     Поиск самой длинной строки в const char** #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 <iostream>
using std::cout;
using std::cin;
using std::endl;
char* maxn(char** const ar, const int limit) {
    int curmax = 0, absmax = 0, max_ind = 0, count = 0;
    for (int i = 0; i < limit; count = 0, ++i) {
        while (ar[i][count])
            ++count;
        cout << count; //почему не выполняется ???____
        if (count > curmax && count > absmax) { // здесь проверка на текущее максимальное в паре и абсолютное
            absmax = curmax = count;
            max_ind = i;
        }
        else if (count > curmax) // здесь только на текущее
            curmax = count;
    }
    return ar[max_ind];
}
int main() {
 
    char* arr[] = {"",
    "a",
    "asd",
    "b",
    "asdfg",
    "df"
    };
 
    cout <<  maxn(arr, 6) << endl;
 
    return 0;
}

Вот такой ерундой:
C++
1
int* limit
не знамайтесь. Нет смысла передавать в функции указатели на встроенные типы.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
18.03.2014, 16:49  [ТС]     Поиск самой длинной строки в const char** #7
А вот мой код, может я чего еще не так делаю:
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
#include <iostream>
using namespace std;
 
template <typename T>
T maxn(T*, const int*);
 
template <>
char* maxn<char*>(char**, const int*);
 
int main(int argc, char **argv)
{
    //test arrays:
    const int ari_size = 6;
    int ari[ari_size] = {7, 11, 7, 9, 9, 21};
    const int ard_size = 4;
    double ard[ard_size] = {4.1, 0.01, 71.9, 43};
    const int ars_size = 6;
    const char* ars[ars_size] = {
        "Jammy house",
        "Extraterrestial intelligence",
        "Generally electrical",
        "Free Kenny",
        "Central substance",
        "Silent noise"
    };
    
    cout << maxn(ari, &ari_size);
    cout << endl;
    cout << maxn(ard, &ard_size);
    cout << endl;
    cout << maxn(ars, &ars_size);
    
    return 0;
}
 
template <typename T>
T maxn(T* ar, const int* limit) {
    T curmax = 0, absmax = 0;
    for (int i = 1; i < *limit; ++i)
        if (ar[i] > ar[i-1]) {
            curmax = ar[i];
            if (curmax > absmax)
                absmax = curmax;
        }
    return absmax;
}
 
template <>
char* maxn<char*>(char** ar, const int* limit) {
    int curmax = 0, absmax = 0, max_ind = 0, count = 0;
    for (int i = 0; i < *limit; ++i) {
        count = 0;
        while (ar[i][count])
            ++count;
        cout << count;
        if (count > curmax && count > absmax) {
            absmax = curmax = count;
            max_ind = i;
        }
        else if (count > curmax)
            curmax = count;
    }
    return ar[max_ind];     
}
Добавлено через 4 минуты
Цитата Сообщение от Ilot Посмотреть сообщение
Нет смысла передавать в функции указатели на встроенные типы.
Ок, сделал так:
C++
1
2
3
4
5
template <typename T>
T maxn(T*, const int&);
 
template <>
char* maxn<char*>(char**, const int&);
Все равно мне выдает последнюю строчку.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
18.03.2014, 16:56     Поиск самой длинной строки в const char** #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну так ежу понятно, что вы неправильно указали специализацию. Нужно вот так:
C++
1
2
template <>
const char* maxn<const char*>(const char**, const int);
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
18.03.2014, 17:00  [ТС]     Поиск самой длинной строки в const char** #9
Спасибо, Ilot!!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 17:10     Поиск самой длинной строки в const char**
Еще ссылки по теме:

Нахождение номера самой длинной строки в матрице - C++
люди кто может помогите вроде бы элементарная задача а доконца разобраться не могу.... Дана целочисленная квадратная матрица найти №...

Файловые потоки: узнать номер самой длинной строки и её размер - C++
Я с файла считываю информацию, а мне нужно узнать номер самой длинной строки и её размер

Как правильно написать счетчик для нахождения самой длинной строки? - C++
Ввести массив строк и найти в нем максимальную по длине строку. Не учитывать случай, когда таких строк несколько. #include &quot;stdafx.h&quot; ...

Вывести номер строки матрицы с самой длинной последовательностью одинаковых элементов - C++
Пожалуста, кто знает решите пожалуста задачку: Дана квадратная матрица m*m, написать программу которая выводит номер той строки в матрице...


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.03.2014, 17:10     Поиск самой длинной строки в const char** #10
Цитата Сообщение от Ilot Посмотреть сообщение
Нет смысла передавать в функции указатели на встроенные типы.
Это очень контекстно зависимая фраза всё таки. Если используется только чтение единственного значения по указателю, то да, смысла не много. Иначе как минимум может быть полезно для:
- передачи массива (адрес первого элемента);
- возврата значения через запись по переданному адресу.
Yandex
Объявления
18.03.2014, 17:10     Поиск самой длинной строки в const char**
Ответ Создать тему
Опции темы

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