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

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

Войти
Регистрация
Восстановить пароль
 
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
#1

Не читает пробелы - C++

18.02.2014, 20:13. Просмотров 435. Ответов 4
Метки нет (Все метки)

Доброго времени суток,задание такое. В файле какие нибудь символы, если встречается # , то он действует как Backspace, саму решетку не записывает и удаляет 1 элемент. Решить с помощью стека. У меня вроде бы решается, но только пробелы не записываются, помогите пожалуйста

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
// стеккласс.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "iostream";
#include <fstream>;
using namespace std;
 
class Stack
{
    struct Element{
        char inf;
        Element *next;
        Element(int x,Element *p):inf(x), next (p)
        {
        }
    };
    Element *head;
public:
    Stack():head(0){
    }
    bool Emty()
    { return head ==0;
    }
 
    void PopDel()
    {
        if(!Emty()){
            
        Element *r = head;
        int i =r -> inf;
        head = r->next;
        delete r;
        }
        
    }
 
    char Pop()
    {
        if(Emty()){
            return 0; }
        Element *r = head;
        char i =r -> inf;
        head = r->next;
        delete r;
        return i;
        
    }
 
    void Push (char data){
        head = new Element(data,head);
    }
 
    //int Top()
 
};
int _tmain(int argc, _TCHAR* argv[])
{
    Stack stack;
    char x = ' ';
    //size_t cntr = 0;
    //ifstream iFile("in.txt");
    ifstream in("input.txt");
    ofstream out("output.txt");
    while(!in.eof()){
        in>>x;
        if(x!='#'){
            stack.Push(x);
        }
        else{
            if(!stack.Emty()){
                stack.PopDel();
            }
        }
    }
    Stack revert;
    while(!stack.Emty()){
        revert.Push(stack.Pop());
    }
 
        while(!revert.Emty()){
        out<<revert.Pop();
    }
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 20:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не читает пробелы (C++):

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

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

не читает char[] - C++
Есть функция, читающая из данной строки с данной позиции следующую цифру: int sread(char* inpfs, int* topos){ vector&lt;int&gt; res; ...

не читает модуль в if() - C++
Вот отрывок проги ,почему у меня здесь выводит не максимальное по модулю значение,а просто максимальное значение w,first-double ...

Не читает строками из файла - C++
Если данные в файле разделены пробелом, то для программы он аналогичен новой строке, то есть если строка состоит из двух или более слов, то...

Почему не читает из файла? - C++
почему не читает из файла? void Container::fromFile(const std::string &amp;fileName) { std::ifstream in(fileName.c_str(),...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
18.02.2014, 23:51 #2
Попр
Цитата Сообщение от onlwork Посмотреть сообщение
if(x!='#'){
stack.Push(x);
}
Попробуй так
C++
1
2
3
4
if(x!='#'){
stack.Push(x);
stack.Push(" ");
 }
0
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
19.02.2014, 01:46  [ТС] #3
Немного не то, он тогда будет добавлять пробелы через каждый символ. А нужно так: Например строка sdfdg## sdf !!!1# нужно что бы она в стек записалась с пробелами
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
19.02.2014, 09:25 #4
Пожалуй не лучший вариант однако работает:
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<fstream>
#include<stack>
 
int main()
{
    std::ifstream in;
    std::ofstream out;
    in.open("input.txt");
    if ( !in.is_open() ){
        std::cerr << "Can't open file input..." << std::endl;
        return 1;
    }
    out.open("output.txt");
    if ( !out.is_open() ){
        std::cerr << "Can't open file output..." << std::endl;
        return 1;
    }
    std::stack<char> chStack;
    std::istreambuf_iterator<char> input(in);
    std::istreambuf_iterator<char> in_end;
    while (input != in_end) {
        if(*input == '#') {
            if(!chStack.empty())
                chStack.pop();
        }
        else
            chStack.push(*input);
        ++input;
    }
    while (!chStack.empty()) {
        out.write(reinterpret_cast<char*>(&chStack.top()), sizeof(char));
        chStack.pop();
    }
    in.close();
    out.close();
    return 0;
}

Так как задача была поставлена решить через стек элементы в выходном файле расположенны в обратном порядке. Думаю ТС сам с этим разберется.
1
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
19.02.2014, 19:43  [ТС] #5
Спасибо, работает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 19:43
Привет! Вот еще темы с ответами:

Не читает coords.txt - C++
Всем привет. В продолжении темы http://www.cyberforum.ru/cpp-beginners/thread1566010.html Возникла новая проблема. В coords.txt в таком...

Программа не читает файл - C++
Программа не читает файл. Подскажите, где моя ошибка. // lab7.cpp: определяет точку входа для консольного приложения. // #include...

Неправильно читает файл - C++
Вот код программы (суть в тесте методов С++ по работе с бинарными файлами): #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Не читает файл _wfopen_s - C++
Пишу программу которая удалит из папки songs все файлы с расширением .osu у которых в 10 строчке в стоит mode: 1. Прога ищет все файлы с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.02.2014, 19:43
Ответ Создать тему
Опции темы

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