С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 3
Регистрация: 09.02.2015
Сообщений: 79
1

Стеки и getline

02.05.2018, 19:05. Показов 1058. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите,пожалуйста, почему не считает минимальную строку

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
#include "stdafx.h"
#include <iostream>
#include <stack>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(0, "Rus");
    int count = 0; // счетчик номера строки 
    string cur_str, min_str; // текущая строка, минимальная строка
    stack <int> st;
    ifstream in("D:\stack.txt");
    // занесение в стек
    char str[255];
    int n;
    while (!in.eof()) // если конец возвращает 0
    {
        in.getline(str, 255);
        n = strlen(str);
        st.push(n);
        cout<<str<<" - "<<n << " символа"<<endl;
    }
    
 // вывод стека на экран
    cout << "Стек - ";
    while (!st.empty())
    {
 
        cout << st.top() << " ";
        st.pop();
    }
    cout << endl;
    
 
    // Нахождение минимальной строки
    getline(in, cur_str);
     min_str = cur_str;
    while (getline(in, cur_str)) {
 
        if (cur_str.size() < min_str.size())
        {
 
            min_str = cur_str;
            ++count;
        }
 
    }
    cout << "Минимальная строка № " << min_str.size() << " - " << min_str;
    cout << " Это строка номер - " << count << endl;
 
    in.close();
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2018, 19:05
Ответы с готовыми решениями:

Отличие getline() от cin.getline()
Чем отличается getline() от cin.getline() ?

Объясните разницу между "cin.getline" и "std::getline"
string a; cin.getline(a); getline(cin, a);в чем разница между &quot;cin.getline(a);&quot; и &quot;getline(cin,...

Getline() "съедает" следующий getline()
Всем привет! Пишу небольшое консольное приложение. Идея такова: в карточке пользователя библиотеки...

Стеки
Переставить элементы стека в таком порядке:x(1),x(2)...x(n)-&gt;x(1),x(n-1),x(2),x(n-2)... Элементы...

5
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101
02.05.2018, 19:09 2
Скинь файл stack.txt
1
0 / 0 / 3
Регистрация: 09.02.2015
Сообщений: 79
02.05.2018, 19:12  [ТС] 3
panuchi,
1234
12345
123456
1234567
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
02.05.2018, 19:19 4
Ну начнем с того, что у тебя уже конец файла достигнут, а ты начинаешь снова считывать из него строки.
-> Перемести указатель на начало.
Но, зачем тебе это надо, если ты в стеке уже имеешь длины строк и можешь оттуда минимальную найти?
1
0 / 0 / 3
Регистрация: 09.02.2015
Сообщений: 79
03.05.2018, 00:47  [ТС] 5
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
// ConsoleApplication33.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <stack>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(0, "Rus");
    int count = 0; // счетчик номера строки 
    stack <int> st;
    ifstream in("D:\stack.txt");
    // занесение в стек
    char str[255];
    int n;
    string min_len;
 
    getline(in, min_len); // min_len = первая строка
    int minLen = min_len.size(); // кол-во символов в первой строке
 
    // возвращает указатель в начало файла//
    in.clear(); //  
    in.seekg(0); // 
    //------------------------------------//
 
 
    while (!in.eof()) // если конец возвращает 0
    {
        in.getline(str, 255);
        n = strlen(str);
    
        st.push(n);
        
        if (n < minLen) {
            minLen = n; 
        }
        
        cout<<str<<" - "<<n << " символа"<<endl;
    }
    cout << "Длина минимальной строки " << minLen << " символ(-а)" << endl;
 // вывод стека на экран
    cout << "Стек - ";
    while (!st.empty())
    {
 
        cout << st.top() << " ";
        st.pop();
    }
    cout << endl;
    
 
    
    in.close();
 
    system("pause");
    return 0;
}
Вот я нахожу длину минимальной строки, а как найти номер этой строки, подскажите пожалуйста
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
03.05.2018, 10:45 6
Лучший ответ Сообщение было отмечено invzful как решение

Решение

invzful, Так, на скорую руку:
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
#include <fstream>
#include <iostream>
#include <stack>
#include <string>
 
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
    setlocale(0, "");
    
    std::stack<int> st;
 
    std::ifstream fin("stack.txt");
    if (!fin.is_open())
        cout << "Ошибка открытия файла." << endl;
    else
    {
        std::string min_string;
        int string_count = 0;
        int string_pos = 0;
 
        while(!fin.eof())
        {
            string_count++;
            std::string str;
            getline(fin, str);
            
            if (min_string.empty())
            {
                min_string = str;
                string_pos = string_count;
            }
 
            st.push(str.length());
            
            if (str.length() < min_string.length())
            {
                min_string = str;
                string_pos = string_count;
            }
            
            cout << string_count << ". " << str << " - " << str.length() << " символа(ов)" << endl;
        }
 
        cout << "Минимальная строка: " << min_string << " - " << min_string.length() << " символа(ов)" << endl;
        cout << "Это строка номер - " << string_pos << endl;
    }
    if (st.empty())
        cout << "Стек пуст." << endl;
    else
    {
        cout << "Стек: ";
        while (!st.empty())
        {
 
            cout << st.top() << " ";
            st.pop();
        }
        cout << endl;
    }
    return 0;
}
0
03.05.2018, 10:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2018, 10:45
Помогаю со студенческими работами здесь

Стеки С++
Добрый вечер.Задание следующие нужно сделать добавление в стек после елемента L.Дано 2 стека X Y из...

Стеки
Создать стек с числами в диапазоне от –50 до +50.Создать новый стек, в который поместить каждый...

стеки
Здравствуйте можете объяснить что такое стек как структура данных , как его создать и как его можно...

Стеки
Создать проект, демонстрирующий работу со стеком, организованным на основе списка. Все операции со...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru