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

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

Восстановить пароль Регистрация
 
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
18.02.2014, 20:13     Не читает пробелы #1
Доброго времени суток,задание такое. В файле какие нибудь символы, если встречается # , то он действует как 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 20:13     Не читает пробелы
Посмотрите здесь:

C++ не читает файл
C++ чтение из *.txt файла, не читает
C++ некорректно читает из файла
C++ не читает char[]
C++ не читает файл в Qt
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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(" ");
 }
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
19.02.2014, 01:46  [ТС]     Не читает пробелы #3
Немного не то, он тогда будет добавлять пробелы через каждый символ. А нужно так: Например строка sdfdg## sdf !!!1# нужно что бы она в стек записалась с пробелами
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 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;
}

Так как задача была поставлена решить через стек элементы в выходном файле расположенны в обратном порядке. Думаю ТС сам с этим разберется.
onlwork
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
19.02.2014, 19:43  [ТС]     Не читает пробелы #5
Спасибо, работает
Yandex
Объявления
19.02.2014, 19:43     Не читает пробелы
Ответ Создать тему
Опции темы

Текущее время: 07:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru