kurakinvit
11/14/2013 - 11:30 AM

Ввод/вывод и Культура при работе с числами

Ввод/вывод и Культура при работе с числами

<b>Ввод/вывод</b>
Для ввода/вывода на C# не всегда достаточно стандартных методов Console.ReadLine, String.Split иConsole.WriteLine. В некоторых задачах потребуется собственная быстрая реализация разбора входных данных и форматирования выходных.

В некоторых задачах числа разделяются не ровно одним пробелом. Поэтому вместо
Console.ReadLine().Trim().Split(' ')

следует использовать
Console.ReadLine().Split(new char[] {' ', '\t'}, StringSplitOptions.RemoveEmptyEntries)

Не забывайте, что культура по умолчанию может быть любой. 
Это важно, если вам требуется считать или вывести число с плавающей точкой: разделитель целой и дробной части может быть задан в системе как «.» или как «,». 
В настоящий момент на сервере настроен разделитель «.», однако это может измениться в будущем. 
Чтобы не сталкиваться с подобными проблемами, указывайте культуру явно при каждой операции ввода/вывода или установите культуру по умолчанию для всей своей программы:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Хитрости при работе с датой и временем:
http://blog.vkuznetsov.ru/posts/2011/09/18/malenkie-chudesa-csharp-net-datetime-s-dopolnitelnymi-preimushhestvami#.UtfINsbIZHQ


int yr = DateTime.Today.Year;
int mth = DateTime.Today.Month;
// начало текущего месяца
DateTime firstDay = new DateTime(yr, mth, 1);
deStart.Date = firstDay;
// конец текущего месяца
DateTime lastDay = new DateTime(yr, mth, DateTime.DaysInMonth(yr, mth));
deEnd.Date = lastDay;

// получить дату начала недели
DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
// получить дату субботы
DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);

public static class DateTimeExtensions
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = dt.DayOfWeek - startOfWeek;
        if (diff < 0)
        {
            diff += 7;
        }
        return dt.AddDays(-1 * diff).Date;
    }
}