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

Дерево каталогов!Посмотрите ошибки - C++

Восстановить пароль Регистрация
 
GeForce46
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 18
13.11.2013, 14:59     Дерево каталогов!Посмотрите ошибки #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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "stdafx.h"
#include <vector>       // vector
#include <iostream>     // cout / cin / string
#include <algorithm>    // find
using namespace std;
 
// prototype for containers
vector<string> directory = {"."};
vector<string> upper_directory = {"/"};
 
// prototypes for main function
void menu();
void parse(string);
 
// prototypes for parsing input commands
int get_to_root(vector<string>, vector<string>, int size_upper, int); // recursion
void cd_func(); 
string pwd_func();
void mkdir_func();
void clear_func(vector<string>&, vector<string>&);
 
//////////////////
int main(void)
{           
    menu();
    return 0;
}   
//////////////////
 
string pwd_func() 
{
    return upper_directory.back(); 
}
 
void mkdir_func()
{   
    string temp_low_dir;
 
    cin >> temp_low_dir;    // name of low directory
    directory.push_back(temp_low_dir);  
 
    // write to upper dir name of current dir
    upper_directory.push_back(pwd_func());
}   
 
void cd_func()
{
    string name;
    cin >> name;    // directory to move in 
 
    if (name == "~")
        cout << "Depth = " << get_to_root(directory, upper_directory, upper_directory.size()-1, 0) << endl;
    else 
    {
        // vector<string>::iterator it = find(directory.begin(), directory.end(), name);
        // if(*it == directory.back())
        // {
            // cout << "dir not found" << endl;
        // }
        // whether the directory exist, moving in. **ERROR** if we enter alone directory, seg fault
//      for(auto it = directory.begin(); it != directory.end(); it++)
//      {
//          if(!name.compare(*it))
//          {
        // else
        // {
                upper_directory.push_back(name);
                directory.push_back(".");
        // }
//          }
//      }
    }
}
void menu()
{
    string exit = "exit";
    string input;
 
    do
    {
        cout << "Enter action: "; cin >> input; 
 
        parse(input);
    
        cout << "directory (that are in current)" << endl; 
        for(auto it = directory.begin(); it != directory.end(); it++)
            cout << " " << *it;
            
        cout << endl;
        
        cout << "upper_directory (current)" << std::endl;
        for(auto it = upper_directory.begin(); it != upper_directory.end(); it++)
            cout << " " << *it;
        
        cout << endl;
    } while(input.compare(exit));
}
void parse(string input)
{
    string cd = "cd";
    string mkdir = "mkdir";
    string pwd = "pwd";
    string clear = "clear";
 
    if(!input.compare(cd))
            cd_func();
        else if(!input.compare(pwd))
            cout << "CURRENT DIRECTORY: " << pwd_func() << endl;
        else if(!input.compare(mkdir))
            mkdir_func();
        else if(!input.compare(clear))
            clear_func(directory, upper_directory);
}
int get_to_root(
                vector<string> directory,       // container with directories
                vector<string> upper_directory, // container with upper_directories
                int size_upper,                 // size of upper_directory container
                int depth                       // resulting int
                )
{
    if(upper_directory.at(size_upper) != "/") 
    {
        if(upper_directory.at(size_upper) == upper_directory.at(size_upper-1))
            return get_to_root(directory, upper_directory, size_upper-1, depth);
        return get_to_root(directory, upper_directory, size_upper-1, depth+1);
    }
 
    if(upper_directory.at(size_upper) == "/")
        return depth;
 
    return 0;
}
void clear_func(vector<string>& directory, vector<string>& upper_directory)
{
    directory.clear();
    upper_directory.clear();
    directory.push_back(".");
    upper_directory.push_back("/");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 14:59     Дерево каталогов!Посмотрите ошибки
Посмотрите здесь:

C++ Посмотрите ошибки
C++ Дерево каталогов. Не могу найти ошибку.
дерево каталогов C++
Посмотрите ошибки C++
C++ Посмотрите ошибки STL
Бинарное дерево, исправить ошибки в коде C++
C++ Посмотрите код на наличие ошибки
Посмотрите ошибки: switch и строка в char C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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