Как правильно понять тестовое задание c#, часть вторая?
Ребятушки еще одно уточнение по тестовому
в нем есть такой абзац:
Имя входного, выходного файла, режим сортировки, а так же тип содержимого задаются при
запуске через аргументы командной строки. Примеры запуска из командной строки для Windows:
sort-it.exe in.txt out.txt -i -a (для целых чисел по возрастанию)
sort-it.exe in.txt out.txt -i -d (для целых чисел по убыванию)
sort-it.exe in.txt out.txt -s -a (для строк по возрастанию)
а еще есть вот такой:
Результатом работы программы должен являться новый файл с содержимым входного файла,
отсортированным по возрастанию или убыванию. Для сортировки строк использовать
лексикографический порядок (по кодам символов).
Внимание! Вопрос! зачем мне знать о типах содержимого, если они будут сортироваться по значением кодов символов? я разобью строку на массив и буду сравнивать как строки.
я же могу сравнивать по кодам и буквы с цифрами? или я что-то не понимаю?
По возрастанию означает от меньшего к большему. А коды тебе не нужны. Если i, парсишь в int и сравниваешь. Если s, сравниваешь через String.Compare(...) (это и будет лексикографически). Только подбери нужный вариант метода.
Артём Токаревских: а еще такой вопрос...когда я с читал аргументы и там поставили стринг или инт...сначала же он все читает с файла с стринг...потом разделить ее по переносу строки и записать в массив....а потм уж если i то массив пропарсить в инт? и отдать массив в сортировку?
Ты можешь cчитать файл так:
string[] lines = System.IO.File.ReadAllLines(@"C:\TestFolder\in.txt");
Потом, если i, перебрать и наполнить int[]
Под вариантом метода я имел ввиду перегрузки String.Compare. Есть одна небольшая засада. Если брать вариант с двумя строковыми параметрами, то он будет использовать настройки локализации компа, а они не известно какие. В задании же сказано "по кодам символов", то есть заглавные буквы отличаются от строчных. Поэтому можно взять Compare, где третьим, булевым параметром явно указать это.
Если будешь сравнивать числа как строки. То в случае 100 и 90 сначала будут сравнены первые символы. И так как 1 меньше 9, то железный друг решит, что 100 меньше 90. А это не совсем верно.
Артём Токаревских: пока сделал так:
прочел файл и записал в массив стринг
public string[] Reader(string fromfile)
{
try
{
StreamReader reader = new StreamReader(@"./" + fromfile);
string line = reader.ReadToEnd();
reader.Close();
string[] row = line.Split('\n');
return row;
}
catch (Exception e)
{
Console.WriteLine("Файл не может быть прочитан");
Console.WriteLine(e.Message);
}
return new string[0];
}
в другом методе
public string[] SortUpInt(string[] lane, string typedata)
{
if (typedata.Equals("-i"))
{
try
{
int[] intline = Array.ConvertAll(lane, int.Parse);
////тут выполняю сортировку и возвращаю отсортированный инт массив
}
catch (Exception e)
{
Console.WriteLine("Файл не может быть отсортирован");
Console.WriteLine(e.Message);
}
}
string temp;
int j;
for (int i = 1; i <= lane.Length - 1; i++)
{
temp = lane[i];
j = i - 1;
while (j >= 0 && String.Compare(lane[j], temp, StringComparison.InvariantCultureIgnoreCase) > 0)
{
lane[j + 1] = lane[j];
j--;
}
lane[j + 1] = temp;
}
return lane;
}
ну как?
Вообще-то строки разделяются \r\n, но могут и \n
Так что правильнее как-то так:
string[] stringSeparators = new string[] {"\n", "\r\n" };
string[] lines = text.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
Всё, я пойду домой. Кстати, собиралсяна выходных повторить основы и написать в качестве упражнения быструю сортировку и сортировку слиянием с использованием потоков.