Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 2
Регистрация: 15.12.2014
Сообщений: 121

Удалить из массива строк самую короткую строку

13.04.2015, 21:36. Показов 3780. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сформировать массив строк разной длины. Удалить из него самую короткую строку.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2015, 21:36
Ответы с готовыми решениями:

Сформировать массив строк. Удалить из него самую короткую строку
Помогите пожалуйста. Сформировать массив строк. Удалить из него самую короткую строку

Записать в файл последовательность строк. Самую короткую строку переписать в обратном порядке
Помогите новичку написать программу, а то у нас требуют объяснять не кто хочет!

Определить самую длинную и самую короткую из введенных строк
Необходимо организовать ввод 3 названия городов. А потом вывести на экран консольно самое длинное и короткое название города. Лезут ошибки...

24
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
13.04.2015, 21:44
Это выйдет что-то вроде указателя на указателей? Нужно указывать размер массива? Вывод в конце нужен?
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
13.04.2015, 22:00
Цитата Сообщение от maks242 Посмотреть сообщение
Это выйдет что-то вроде указателя на указателей? Нужно указывать размер массива? Вывод в конце нужен?
почему ты спрашиваешь решение у того, кто задал вопрос, условие сформулировано понятно, вчитывайся и думай

Добавлено через 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
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <time.h>
#include <math.h>
#include <string>
 
using namespace std;
 
int main()
{
    srand(time(0));
    const int n = 10;
    string *s = new string[n];
    int min = 0;
    for (int i = 0; i < n; i++)
    {
        cout << i << ": ";
        s[i].resize(rand() % 30+1);
        if (s[i].size() < s[min].size())
            min = i;
        for (int j = 0; j < s[i].size() - 1; j++)
        {
            switch (rand() % 3)
            {
            case 0:s[i][j] = rand() % 27 + 'a'; break;
            case 1:s[i][j] = rand() % 27 + 'A'; break;
            case 2:s[i][j] = rand() % 10 + '0'; break;
            }
        }
        s[i][s[i].size() - 1] = '\0';
        cout << s[i] << endl;
    }
    s[min] = "";
    cout << endl;
    for (int i = 0; i < n; i++)
    {
        cout << i << ": ";
        cout << s[i] << endl;
    }
    cin.get();
}
1
0 / 0 / 2
Регистрация: 15.12.2014
Сообщений: 121
13.04.2015, 22:05  [ТС]
maks242, надо сформировать динамический массив строк с разными длинами строк (первая мерность 7, вторая – от 1 до 15 заполнить рендомно). Удалить из него самую короткую строку. Размер массива фиксированный. Вывод в конце нужен.
0
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
13.04.2015, 22:34
Что-то вроде этого?
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
#include <iostream>
#include <string>
#include <malloc.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    string Text;
    int SizeOfMassive = 0;
    cout << "Введите нужное количество строк: ";
    cin >> SizeOfMassive;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    string **ppMassive = new string*[SizeOfMassive];
    for (int i = 0; i < SizeOfMassive; i++)
    {
        cin >> Text;
        ppMassive[i] = new string[Text.length() + 1];
        *ppMassive[i] = Text;
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    int *pSizeOfMassive = new int[SizeOfMassive + 1];
    int SizeOfLittleWord = 0;
    int NumberOfMassive = 0;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    for (int i = 0; i < SizeOfMassive; i++)
    {
        pSizeOfMassive[i] = _msize(ppMassive[i]) / sizeof(ppMassive[i]);
        SizeOfLittleWord += pSizeOfMassive[i];
    }
    for (int i = 0; i < SizeOfMassive; i++)
    {
        if (SizeOfLittleWord > pSizeOfMassive[i])
        {
            SizeOfLittleWord = pSizeOfMassive[i];
            NumberOfMassive = i;
        }
    }
    for (int i = NumberOfMassive; i > SizeOfMassive; i++)
    {
        *ppMassive[i] = *ppMassive[i + 1];
        delete ppMassive[SizeOfMassive];
    }
    //Вывод на экран
    for (int i = 0; i < SizeOfMassive; i++)
    {
        cout << *ppMassive[i] << endl;
    }
    system("pause");
    return 0;
}
1
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
13.04.2015, 22:47
как не пытайся казаться умным, а надпись
string **ppMassive
говорит о многом,
да и заполнение рандомными строками у тебя как-то не реализовано

ты, кстати, если не понимаешь, ты сделал динамическую матрицу строк, которая на квадрат может быть не похожей

1111111
0100111
0100101
0100101
0100101
0100001
0100000

типо этого, 1 это строка
0
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
13.04.2015, 22:50
Krock21rus, Зачем рандомными если он не говорил что ему нужен рандом, не лучше ли сделать чтобы пользователь сам имел возможность ввести данные. И да, я не отрицаю что у меня с указателями не очень хорошо.
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
13.04.2015, 22:53
Цитата Сообщение от a4temer Посмотреть сообщение
заполнить рендомно
Цитата Сообщение от a4temer Посмотреть сообщение
Сформировать
тут нужно просто внимательно читать условие
по нескольку раз перечитывать
а потом только писать

если со string не получается пробуй с char

Добавлено через 35 секунд
Цитата Сообщение от maks242 Посмотреть сообщение
не лучше ли сделать чтобы пользователь сам имел возможность ввести данные
проще, не лучше
0
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
13.04.2015, 22:53
Krock21rus, Ну так объясни где моя ошибка.
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
13.04.2015, 23:17
тяжело читать твой код, необходим одномерный массив строк, то есть массив string'ов
это string *a = new string[n];
а у тебя двумерный массив string'ов, то есть матрица

Добавлено через 46 секунд
у тебя вроде каждый символ это обьект string, используй char вместо string

Добавлено через 1 минуту
советую для начала более понять для чего нужен оператор new и delete, где есть большой смысл использовать delete и что значат [] после new
0
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
13.04.2015, 23:32
Про delete я забыл, а new это разве не выделение памяти? А если это ** то это выделение места на массивы указателей.
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
14.04.2015, 11:17
new выделяет память,
int *a = new int[n] выделяет пямять n*sizeof(int) и придаёт a адрес первого элемента
int **b = new int*[n] выделяет память n*sizeof(*int) и придаёт *b адрес первого элемента
int b[i] = new int[n] выделяет память n*sizeof(int) для 2ой мерности массива b[i] и придаёт указателю b[i] адрес 1 элемента

string это контейнер, это динамический массив, как и vector,list,deque и т.д., это тот же *char, только с расширенными встроенными функциями
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.04.2015, 13:35
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
 
int main()
{
    using v_str = std::vector<std::string>;
    auto print_v = [](const v_str &v)
    {
        std::copy(v.cbegin(), v.cend(), std::ostream_iterator<std::string>(std::cout, "\n"));
        std::cout << "***************\n";
    };
    auto lessLength = [](const std::string &lhs, const std::string &rhs)
    {
        return lhs.length() < rhs.length();
    };
 
    std::uniform_int_distribution<char> charDist('a', 'z');
    std::uniform_int_distribution<int> lengthDist(1, 15);
    std::default_random_engine gen{ std::random_device()() };
 
    const size_t numWords = 7;
    v_str words(numWords);
    std::generate(words.begin(), words.end(), [&charDist, &lengthDist, &gen]
    {
        std::string result;
        for (int i = lengthDist(gen); i != 0; i--)
            result += charDist(gen);
        return result;
    });
 
    print_v(words);
    words.erase(std::min_element(words.begin(), words.end(), lessLength));
    print_v(words);
}
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.04.2015, 13:44
А что уж для строки for, а не std::generate?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.04.2015, 14:18
Цитата Сообщение от Somebody Посмотреть сообщение
А что уж для строки for, а не std::generate?
У строки только одна версия конструктора позволяет задавать длину, но она действует по типу fill (заполняет определённым символом).
Можно конечно и так:
C++
1
2
3
4
5
6
std::generate(words.begin(), words.end(), [&charDist, &lengthDist, &gen]
{
    std::string result(lengthDist(gen), ' ');
    std::generate(result.begin(), result.end(), [&charDist, &gen] { return charDist(gen); });
    return result;
});
Добавлено через 28 секунд
Но мне меньше нравится.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.04.2015, 14:23
Цикл с += - это genarate_n с back_inserter.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.04.2015, 14:27
Никогда ранее не пользовался generate_n, банально не знал что такой существует.
Переделал на более каноничный вариант.
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
 
int main()
{
    using v_str = std::vector<std::string>;
    auto print_v = [](const v_str &v)
    {
        std::copy(v.cbegin(), v.cend(), std::ostream_iterator<std::string>(std::cout, "\n"));
        std::cout << "***************\n";
    };
    auto lessLength = [](const std::string &lhs, const std::string &rhs)
    {
        return lhs.length() < rhs.length();
    };
 
    std::uniform_int_distribution<char> charDist('a', 'z');
    std::uniform_int_distribution<int> lengthDist(1, 15);
    std::default_random_engine gen{ std::random_device()() };
 
    const size_t numWords = 7;
    v_str words(numWords);
    std::generate(words.begin(), words.end(), [&charDist, &lengthDist, &gen]
    {
        std::string result;
        std::generate_n(std::back_inserter(result), lengthDist(gen), [&charDist, &gen] { return charDist(gen); });
        return result;
    });
 
    print_v(words);
    words.erase(std::min_element(words.begin(), words.end(), lessLength));
    print_v(words);
}
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.04.2015, 14:33
Ещё можно вместо лямбды в лямбде
C++
1
std::bind(charDist, gen)
или вообще забиндить сразу
C++
1
std::function<char()> charGen = std::bind(charDist, gen);
и в лямбду захватывать charGen.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.04.2015, 14:41
Была такая мысль, но тогда подумал, что всё равно надо передавать генератор (для генерации длины).
Хотя как вариант вот так:
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
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
 
int main()
{
    using v_str = std::vector<std::string>;
    auto print_v = [](const v_str &v)
    {
        std::copy(v.cbegin(), v.cend(), std::ostream_iterator<std::string>(std::cout, "\n"));
        std::cout << "***************\n";
    };
    auto lessLength = [](const std::string &lhs, const std::string &rhs)
    {
        return lhs.length() < rhs.length();
    };
 
    std::uniform_int_distribution<char> charDist('a', 'z');
    std::uniform_int_distribution<int> lengthDist(1, 15);
    std::default_random_engine gen{ std::random_device()() };
    std::function<char()> charGen = std::bind(charDist, gen);
    std::function<int()> lengthGen = std::bind(lengthDist, gen);
 
    const size_t numWords = 7;
    v_str words(numWords);
    std::generate(words.begin(), words.end(), [&charGen, &lengthGen]
    {
        std::string result;
        std::generate_n(std::back_inserter(result), lengthGen(), [&charGen] { return charGen(); });
        return result;
    });
 
    print_v(words);
    words.erase(std::min_element(words.begin(), words.end(), lessLength));
    print_v(words);
}
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.04.2015, 14:44
C++
1
[&charGen] { return charGen(); }
Мда...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2015, 14:44
Помогаю со студенческими работами здесь

Найти самую короткую строку файла
Дан текстовый файл F.txt. Напишите программу, которая выведет на экран первую самую короткую строку файла и количество пробелов,...

Найти первую самую короткую строку файла
Дан текстовый файл F.txt. Напишите программу, которая выведет на экран первую самую короткую строку файла и количество пробелов,...

Определить самую короткую строку текстового файла
помогите пожалуйста

Как в АВЛ-дереве найти самую короткую ветвь и удалить ее?
Доброго времени суток. Нужна помощь. В АВЛ-дереве надо найти самую короткую ветвь и удалить ее. Я могу удалить только узел по ключу (ну...

Найти самую короткую строку текста и заменить ее заданной фразой
Найти самую короткую строку текста и заменить её фразой &quot;С Новым годом!&quot;


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru