using System using System Collections using System Collections Generic

 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
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Path
{
public string CurrentPath { get; private set; }
public Path(string path)
{
this.CurrentPath = path;
}
public Path Cd(string newPath)
{
Path retPath = null;
string[] catalogs = CurrentPath.Split('/');
// string[] array = new string[newPath.Length];
int point = 0; // содержит количество точек
string letter = ""; // содержит имя подкаталога в который нужно перейти
string separator = "/"; // разделитель
string buf = ""; // буфер содержащий правильные выходные данные
for (int i = 0; i < newPath.Length; i++)
{
// array[i] = newPath[i].ToString();
if (newPath[i] == '.') { point++; }
if ((newPath[i] >= 'a' && newPath[i] <= 'z') || (newPath[i] >= 'A' && newPath[i] <= 'Z'))
{ letter = newPath[i].ToString(); }
}
if (point % 2 == 0) // проверка на чётность количества точек
{
point = point / 2; // узнаём на сколько каталогов нужно подняться
int catalogs_count = catalogs.Length-point; // определяем позицию для имени каталога в который переходим
catalogs[catalogs_count] = letter; // изменяем имя каталога в массиве строк
for (int i = 0; i <= catalogs_count; i++)
{
if (i < catalogs_count) { buf += catalogs[i] + separator; }
else { buf += catalogs[i]; }
}
//------- в buf сформированны правильные выходные данные
// Теперь нужно retPath присвоить значение buf, и я хз как это сделать
}
else { Console.WriteLine("Введённые данные не кошерны"); }
return retPath;
}
public static void Main(string[] args)
{
Path path = new Path("/a/b/c/d");
Console.WriteLine(path.Cd("../x").CurrentPath);
}
}