1. C# / Говнокод #3334

    +124

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    char arr[] = ... // Здесь происходит чтение массива, неважно как
    string result = "";
    for(int i = 0; i < arr.Length; i++) 
    {
        result += Char.ToString(arr[i]);
    }
    
    Console.WriteLine(result);

    Что интересно, автор уже пол года на C# пишет, до этого 2 года на Java. Решение ко всему прочему еще и очевидно с квадратичной сложностью. А должно быть, естественно Console.WriteLine(new String(array));

    Запостил: theos, 27 Мая 2010

    Комментарии (52) RSS

    • Зачем new String(arr), ведь можно просто массив чаров передать?
      Ответить
      • Да, в коде было переписано на result = new String(array), потому что строка еще используется. Если передать просто массив оно вроде как массив будет писать а не как строка?
        Ответить
        • Выведет строку, к тому же string это по сути char[].
          Ответить
          • >Выведет строку, к тому же string это по сути char[].
            Не совсем. Строка может содержать не весь массив. Тем более что массив логично выводить как [e1, e2, ... ] а не как строки. Честно скажу - на c# не пишу (пишу на джаве) просто у коллеги увидел случайно и попроавил опираясь на знания джавы.
            Ответить
          • >к тому же string это по сути char[].

            пиздеж и провокация. в шурупе строки иммутабельны
            Ответить
            • А массивы? И вообще при чем тут это? Что string, что char[] — последовательность символов, и печатаются они в консоли абсолютно одинаково.
              Ответить
              • > A массивы
                массивы мутабельны

                >И вообще при чем тут это?
                притом, что в заблуждение людей вводишь

                >Что string, что char[] — последовательность символов
                string - класс вообще-то, а последовательность символов это что-то наподобие 'a','b','c'.....

                >и печатаются они в консоли абсолютно одинаково
                char[] a= {'a','b'};
                string b = "ab";
                
                Console.WriteLine(a);
                Console.WriteLine(b);

                так одинаково, угу.
                Ответить
          • ты сишнег что ли?

            в .NET (равно как и в Java) строки имутабельны (в отличии от массивов) и вообще могут пулица
            Ответить
    • показать все, что скрыто> char arr[] = ...
      > arr.Length
      С точки зрения нормального языка ломает мозг и выносит навылет.
      Ответить
      • Что за нормальный язык? Приведите пример.
        Ответить
      • с точки зрения говноязыка где есть свойства семантически, но не синтаксически, из-за чего приходится костылять через методы?

        "char arr[]" вообще недопустимо в C#, зато допустимов яве.
        C# 3.0 даёт:

        Ошибка 1 Неверный оператор объявления массива. Для объявления управляемого массива спецификатор ранга должен предшествовать идентификатору переменной. Чтобы объявить поле буфера фиксированного размера, перед типом поля используйте ключевое слово fixed. C:\Documents and Settings\Максим Прохоров\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\Program.cs 12 19 ConsoleApplication1
        Ответить
        • Ай-яй-яй! Макс, ну зачем же так палиться???
          Ответить
          • не понял, в чём я макс?
            Ответить
            • может быть в этом =))
              ... C:\Documents and Settings\Максим Прохоров\Local Settings\....
              Ответить
              • гг) а в семерке наконец в домашней папке нет пробелов.
                Вот как у меня это выглядет:

                C:\>echo %userprofile%
                C:\Users\Розовая Попка.WINPC
                Ответить
                • 8 лет думали
                  Ответить
                  • между прочим в нтфс -ура - наконец есть символические и жесткие ссылки, так что Documents and Settings одним движением руки превщаются в Users
                    Ответить
                    • Они довольно давно там были, просто не было утилит.
                      В NTFS есть много чего (включая кейс сенситивити, стримы и ссылки) но этим редко пользуются.

                      А так -- да. "documents and settings" это конечно был ёбаный стыд, испортивший кровичуть меньше, чем обратные слеши и \r\n в качетсве перевода строки
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Ну изначально ее сделали для телетайпов. До появления glass ttys печатная машинка терминала была так тупа, что ей надо было явно прокрутить бумагу на строку выше и затем вернуть каретку.

                          Просто в unix от этого отказались, решив сэкономить символ, а у MS нет. Но возможно что ты прав и именно желание легко печтать документы на матричных (тупых, безпротокольных) принтаках и сыграло свою роль.

                          Первые принтеры были даже и не матричные, а знако-местовые (см Daisy wheel printing): у них не могло быть никаких кодировок, бо все буквы были отлиты в граните.

                          Однако большинство принетров что тогда, что сейчас обратно совместимы с самым тупым режимом: если записать им "ABC123" то они именно это и выведут.

                          И так как ESC последовательности требовали драйвера (а в реалиях доса это означало "поддержки со стороны софта") а оно было не всегда, то вполне удобно было "copy foo.txt PRN" (или как-то так) и по LPT документ отправлялся на принтер и всегда там печатался:)

                          Из всех "языков описания страницы" у консьюмерских принетов сейчас выжили только PCL и PostScript. У MS, говорят, есть принтеры которые умеют GDI и XPS, но я их не видал.
                          Ответить
        • аааааа))))) русский компилятор

          педрило детектед
          может у тебя еще и виндус русское?
          Ответить
          • майкрософтский сайт при скачке Visual C# Express дал русскую версию и чо.
            я особо не заморачиваюсь, я ебаный полиглот, хоть на ебаном немецком, блядь.
            Ответить
      • Скорее по самую шею ;)
        Ответить
    • "+= строка" в цикле.... за такое надо руки отрывать по колени
      Ответить
    • > char arr[] = ... // Здесь происходит чтение массива, неважно как

      наверное можно было читать сразу в StringBuilder, а потом StringBuilder.ToString
      Ответить
      • Не, чтение происходит одним махом. И да, я не копипастил а писал по памяти так что опечатался и скобки по сишному поставил.
        Ответить
        • > Не, чтение происходит одним махом

          функция pinvoke или родной .net? вроде и там и там можно читать "одним махом" в StringBuilder, pinvoke-то точно.
          Ответить
          • Stream.Read =) Проблема в том что код на сильверлайте, там стандартная библиотека урезана по самое нихочу.
            Ответить
    • показать все, что скрытоПидоры пидоры пидоры пипи доры
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Строки иммутабельны в CLR. Он создает новый объект и, разумеется, копирует.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Меня бога ради не сломай!
            Ответить
          • А что ты предложил? Сделать строку мутабельной, и изменять ее содержимое в памяти после +=?

            Во-первых сильно усложнится пул строк: придется делать copy on write.
            Во-вторых начнется ад в тех местах, где строки являются ключами.

            var petux = "kuku";
            var dictionary = new Dictionary<string, int>();
            dictionary.Add(petux, 42);
            petux += "ruku";


            Что теперь лежит в "dictionary"?
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Да, так делать можно. Сомневаюсь что так делает cs, но в процессе компиляции кода в нативный код (а-ля хотспот) -- да, безуловно может.

                  Вообще виртуальные машины много чего делают если это прозрачно для программиста: к примеру они вообще могут положить строку в стек, если в ней три буквы и ссылок на нее нет.


                  Но хороший программист на C#, вероятно, не должен даже пытаться на это как-то завязываться.
                  Для него строки лежат в куче (в пуле интернированных строк, если литералы) и иммутабельны. Вот.
                  Ответить

    Добавить комментарий