• Поиск по форумам
  •  
      Этот форум закрыт. Новый форум располагается по адресу http://forum.use.ru  

      Nordnet Форум
      Программирование
      Великий и могучий СИ(а заодно и СИ++)
     
    Страницы: 1 2
    Автор Тема:  Великий и могучий СИ(а заодно и СИ++)
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 16-12-2005 10:35    
    Как то на яндексе наткнулся на тест программеров так вот: требуется сказать что выведет простенькая программа:
    int main() {
    printf("Ok!");
    fork();
    }

    Интересно кто нибудь сможет ее решить ;-)))
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 16-12-2005 10:43    
    А чего ее решать :) Запустить линух и на нем скомпилять и выполнить эту программу.
    Поскольку мне лень это все делать, да и не знаю как выполняется команда fork() (т.е. как она разделяет процесс), предположу что выведется Ok!
    Svan 

    регистрация: 12-11-2001 в 17:25
    сообщений: 3141

    отправлено 16-12-2005 10:51    
    На FreeBSD 4.11-RELEASE-p9 при использовании gcc version 2.95.4 20020320 [FreeBSD]
    Программа случайным образом пишет либо "Ok!", либо "Ok!Ok!".
    Svan 

    регистрация: 12-11-2001 в 17:25
    сообщений: 3141

    отправлено 16-12-2005 10:55    
    На Linux 2.6.14 SMP i686 GNU/Linux при компилировании gcc version 3.3.5 (Debian 1:3.3.5-13) строго пишет "OK!Ok!".

    Различие, по-видимому, в особенностях копиорвания дескрипторов при fork'е в Линуксе и FreeBSD.
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 16-12-2005 11:00    
    Ну да сван прав, пишеться именно по СЛУЧАЮ. либо так, либо два раза.

    Но Ок!Ок! Это ведь не правильно!!! Я когда это увидел подумал что я не понимаю как fork работает, и запускает всю программу заново. И выводилось там не один Ок!! а по десятку предложений и все они дублировались после форк.

    hoover 

    регистрация: 03-09-2004 в 22:27
    сообщений: 287

    отправлено 16-12-2005 15:58    
    А я на рсдн наткнулся на задачки, которые предлагают желающим поработать в microsoft.
    Например: Ваш коллега написал функцию (генератор случайных чисел) возвращающую случайные равновероятные значения от 1 до 5. Напишите функцию используя только этот генератор случайных чисел возвращающую случайные равновероятные значения от 1 до 6.
    У меня не получается :(
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 16-12-2005 22:48    
    2 hoover:
    самый тупой вариант - 6 итераций первой функции и вернем число от 1 до 30.
    Делим это число на 5 - и получаем от одного до 6. (удобнее работать не с 1 а с нулем, но это уже технические детали).
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 17-12-2005 21:26    
    Блин, фигню сказал, а никто не поправил. Распределение будет неравномерное.
    Задачка действительно непростая.

    Пока пусть будет такое решение:
    можем получить действительно равномерное распределение от 1 до 25, а из 1 до 24 можем сделать 1..6. Как мне кажется, ничего страшного нет в том, что 25 отрезаем.
    hoover 

    регистрация: 03-09-2004 в 22:27
    сообщений: 287

    отправлено 19-12-2005 13:05    
    Вот наткнулся на задачку по теме:
    int i = 1;
    i += i++ + ++i;
    printf ("%i", i);
    

    Что выведет? :)
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 13:16    
    2 hoover:
    Тут достаточно просто
    2 + 3 + 2 = 7
    hoover 

    регистрация: 03-09-2004 в 22:27
    сообщений: 287

    отправлено 19-12-2005 15:56    

    19-12-2005 13:16 сообщение от FvS:
    «2 hoover:
    Тут достаточно просто
    2 + 3 + 2 = 7»


    А в K&R сказано, что в таких случаях поведение программы зависит от компилятора.
    Правда в совр. компиляторах (MS, Borland) ответ будет 7. Надо еще в gcc проверить :)
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 19-12-2005 16:39    
    2 hoover: gcc = 7

    Кстати по моей задачке, вывод получается странным потому что вывод на stdout буфферизированный. Если до сборса буферов происходит разделение процесса то сбрасываются оба буфера. Если буффер сбрасывается до разделения имеем только один вывод.
    hoover 

    регистрация: 03-09-2004 в 22:27
    сообщений: 287

    отправлено 19-12-2005 17:09    
    Тогда еще вопросик (сам придумал :) ):
    Что выведет эта программа на C# :
    int i = 1;
    i +=  i++ + ++i;
    Console.Write(i);
    
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 19-12-2005 17:57    
    5 :)
    hoover 

    регистрация: 03-09-2004 в 22:27
    сообщений: 287

    отправлено 19-12-2005 18:05    
    Decker, Компилятором пользовался?
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 19-12-2005 18:15    
    не поиму в чем подвох :(
    почему не шарпные компиляторы себя так ведут
    имхо шарп делает правильнее всех,

    попробовал
    в C# (2005 студия) -- 5
    в C# (2003 студия) -- 5
    в С++ (2003 студия) -- 7
    в managed C++ (2003 студия) -- 7


    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 18:20    
    2 Decker:
    Нефиг такие конструкции клепать ;)

    В плюсах - все ясно, почему 7.

    В C#, для структур (int32 - структура) - все сохраняется на стеке. Соответственно ты складываешь 1 + 3 + 1

     
    Сообщение было изменено автором 19-12-2005 в 18:42
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 18:24    
    Если ты будешь складывать классы, то получишь
    вообще какую-нить фигню типа 9
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 19-12-2005 18:43    
    :)))
    ты меня убиваешь
    первый раз написал, пока я писал ответ, исправил ...
    я стал тупить откуда троика :)
    опять исправил :)

    опять :)

     
    Сообщение было изменено автором 19-12-2005 в 18:44
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 18:48    
    2 Decker:
    Да я сам запутался. :) Перепутал поведение i++ и ++i (т.е. кто кого инкрементит). Сейчас дошло.
    Заодно можно и с классами получить 5, только они должны быть немутабельными.
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 19:04    
    Короче, в плюсах будет не 2 + 3 + 2, а 1 + 3 + 3.

    Различие в том, что в плюсах:
    a += b - это отдельный оператор, который прибавляет к a b, а в шарпе это маска a + b

    PS: Или я конкретно запутался :)
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 19-12-2005 19:06    
    ща выпью йаду, скажи откуда троика :)
    мне вообще кажется что так 1+2+2
    i+=() ~ i = i + () ??? или () + i

    я то ли после 4пар туплю, или просто тупой... бросаю программирование, ухожу в монастырь :(
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 19:33    
    2 Decker:
    Вначале кладем i == 1 на стек
    потом операция i ++
    Получаем - i = 2, на стеке - 1
    Третья ++i, i = 3, на стеке - 3
    Четвертая 1 + 3 = 4
    Пятая 1 + 4 = 5
    Т.е. можно сказать, что в шарпе a += b, это a = a + b
    В плюсах - a = b + a
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 19-12-2005 19:44    
    Короче, чтобы всем было все понятно, написал класс:
    public struct/class integer
    		{
    			private int i;
    
    			public integer(int v)
    			{
    				i = v;
    			}
    
    			public static integer operator++(integer k)
    			{
    				k.i ++;
    				return new integer(k.i);
    			}
    
    			public static integer operator+(integer k, integer v)
    			{
    				return new integer(k.i + v.i);
    			}
    
    			public override string ToString()
    			{
    				return i.ToString ();
    			}
    		}
    

    От изменения типа - меняется результат. А все от того, что структуры сохраняются на стеке, а классы в куче.
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 20-12-2005 10:11    
    2 Decker: "почему не шарпные компиляторы себя так ведут
    имхо шарп делает правильнее всех, "

    !!!!!!! C# ЭТО НЕ СИ И НЕ СИ++ !!!!!!!!!

    мне особенно понравилось, он делает все правильнее всех ;-))
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 20-12-2005 10:33    
    2 NuINu:
    Ну, можно порассуждать, что лучше получить 5 или 7 ;)
    Поскольку 5 - это оптимизируемая конструкция, имхо, это лучше.
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 20-12-2005 12:25    
    Force thx, просто запутался кто как инкрементит
    думал что
    int a = i++; // a = 2
    int b = ++i;// b = 2 ...
    а тут все так как ты сказал... a=1, b = 3.

    2NuINu конечно правильнее, видишь я даже посчитал не так , а ответ сходится ... прям защита от дурака :)
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 20-12-2005 12:39    

    20-12-2005 10:11 сообщение от NuINu:
    !!!!!!! C# ЭТО НЕ СИ И НЕ СИ++ !!!!!!!!!



    это точно, куда уж им до С#, не сравнивай попу с пальцем :)
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 20-12-2005 15:47    
    2 Decker: Не понял??? Попой это ты С-шарп обозвал??? Согласен. ;-)))
    Знаешь это очень правильное сравнение. Палец это самый древний и самый ловкий инструмент используемый человеком. так что и тут все верно.
    И они действительно не сравнимы ;-)))

    К сожалению для всех юзающих шарп, великим и могучим я могу назвать только СИ++. ;-))

    Я уже озвучил в одной теме, простой вопрос: что будет если Микрософт завтра разориться???
    Или признает С-шарп неэффективным комерческим проектом. Ась??? делайте выводы и не начинайте религиозные войны. просто забудьте про существование С# и жизнь ваша станет похожа на праздник. Будте хозяином своей судьбы!!!
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 20-12-2005 15:54    
    2 NuINu:
    А если меня завтра уволят? То мне надо уволится прямо сейчас и перейти в дворники. Они-то точно никогда не разорятся.
    Заниматься фигней, только из-за чьих-то фантазий - меня не прикалывает. Мне нравится писать на нормальном языке а не на плюсах, на которых две недели можно отлавливать багу, только из-за того, что компилятор в разных режимах компилирует разный код.
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 20-12-2005 16:17    
    2 FvS: Не ну фигней конечно заниматься не стоит ;-)). Делай что хочешь конечно. Мое дело предупредить ;-)).
    Кстати если нравяться "нормальные" языки, то java - это полный рулез. Я как то поднимал JavaBuilder под Линксом, и под фрееБСД - работает. Причем хорошо работает. А самое прикольное через Х виндовс работает сама прога на одном компе, а интерфес на другом. Х Интерфес так же поднимается под виндой. Вообщем руль полный. ;-))

    Кстати, про ошибку это ты про Визуал Си??
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 20-12-2005 16:35    
    2 NuINu:
    Про ошибку, это я так, не придираясь к конкретному компилятору. Ибо, эта операция (а заодно и подобные) отдаются на откуп компилятору, и он решает как ее выполнить. И это не есть гуд.
    memleak'и в сложных местах тоже вещь распространенная. И тоже тяжело отловить.
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 20-12-2005 17:43    
    нет, обозвал то я как раз Си и его недоделаный отпрыск...

    что касается майкрософта, то он еще всех нас переживет...

    "С-шарп неэффективный комерческий проект" -- БРЕД
    с выходом нового фреймворка, обновился и сам язык
    С#(теперь он за версией 2.0), не успели зарелизить который, как уже готовят спецификацию С# 3.0,
    а ты говоришь "неэффективный комерческий проект"

    а религизные воины никто и не разжигает ... вроде :)

    удобство как раз в том, что отдельные части программы можно писать на шарпе, а более узкие, например, по скорости (к этому бы ты все равно придрался) можно писать на с++

    спорить с тобой бесполезно, если ты так уперся в свой с++, все равно правда на стороне шарпа ;)

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

    зы : может попробуешь че написать на шарпах :)
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 20-12-2005 17:51    
    2 Decker:
    По поводу C# 3.0, который Linq, он немного не то делает, что стандартный язык. И еще не ясно, что из этого вырастет. Но кто уже видел, что там получается - очень лестно об этом отзываются.
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 20-12-2005 17:58    
    2 Decker: А я не могу ничего на шарпах написать у меня его нет ;-)) и не очень знаю что нужно сделать что бы он появился у меня в линуксе. Или к примеру на ФрееБСД??
    И главное зачем??? Признаться я как старый дед не могу поверить, что Си шарп лучше Явы... ну никак не могу.

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

    "С-шарп неэффективный комерческий проект" -- БРЕД"
    ну это не беред и даже не предположение - это фантазия, и только время может показать подтвердиться ли она или нет.

    ну вот к примеру: "с выходом нового фреймворка, обновился и сам язык"
    не замучаетесь под каждый фреймворк, переписывать свои проекты???
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 20-12-2005 18:01    
    2 FvS: "..кто уже видел, что там получается - очень лестно об этом отзываются"
    Во-во - что получиться никто не знает, но уже лестно о нем отзываются ;-)).

    Думаю вы уже поняли, что я не из тех кто бежит в магазин за последней версией нового пентиума или видеокартой. Лучше выждать время, посмотреть на шишки и выбрать зрелый, работоспособный продукт.
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 20-12-2005 18:22    
    2 NuINu, не пробовал на вкус Яву... так что спорить не буду, но наверняка в ней тоже куча дров, вроде она с графикой не очень дружит...могу ошибаться,
    а GC в Яве есть ???
    хотя не спорю, что Ява у нас тоже популярна, и на ней пишут :)

    а что касается сырости и не устоявшести... то и Москва не сразу строилась... все постепенно...
    а те возможности которые уже предоставляет Шарп
    позволяют писать программы быстро и удобно
    в отличиеот с++;

    а для неWin систем вроде что то есть ,только сам понимаешь майкрософт так просто коды не откроет,
    так что сомнительно что на 'nix-ах когда-нибудь будет полноценный фреймворк.

    а зачем переписывать старые проекты, разные фреймворки стабильно работают на одной машине
    и не конфликтуют друг с другом, исключен dll hell,
    так что все радуются жизни :)
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 20-12-2005 18:35    
    2NuINu, вот тебе под никс
    www.mono-project.com
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 20-12-2005 18:41    
    2 NuINu:


    Во-во - что получиться никто не знает, но уже лестно о нем отзываются ;-)).


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



    Признаться я как старый дед не могу поверить, что Си шарп лучше Явы... ну никак не могу.


    Они не лучше, они примерно одинаковые. Вначале из жавы кое-что стырили при написании первого фреймворка, потом при написании жавы 1.5 кое-что стырили из фреймвока :)



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


    Мир меняется, технологии тоже. Жава уже доросла до 1.5, пхп до 5-ой версии, а все для того, чтобы программистам было удобнее.
    Радует, что извращенцев, которые прикрываясь аргументами о скорости плюсов, затягивают весь проект, становится с каждым годом все меньше и меньше :)



    не замучаетесь под каждый фреймворк, переписывать свои проекты???


    Не-а.
    hoover 

    регистрация: 03-09-2004 в 22:27
    сообщений: 287

    отправлено 20-12-2005 18:45    
    Вот увидел на РСДНе по этому вопросу(C# и C++):

    "Программирование на C++, которым ты так гордишься (впрочем, я тоже ) — это по жизни хождение по граблям. С рождения и до пенсии. Сначала ты наступаешь на эти грабли постоянно, затем учишься от них уворачиваться, потом изобретаешь какие-нибудь ходули в виде смарт-поинтеров и мелких библиотечек и вот грабли хоть уже и пролетают мимо, но до тебя уже не достают. Ты горд собой, шаг широк, ты думаешь, что это свободный полёт. Но это не так, Рома, это всего лишь ходьба на ходулях. Иногда ты всё же цепляешься за какой-нибудь кривой указатель и дружно падаешь со всей своей крутизны на всё те же грабли. Поднимаешься снова и прёшь вперёд как танк.

    А мимо по шикарной автостраде проносятся чуваки на новеньких мерсах и бумерах. Ты делашь два широких шага на своих ходулях, они пролетают две сотни метров. Ты смотришь куда бы побезопаснее ступить, они думаю следует или не следует слегка притормозить на следующем повороте. Их путь выстелен грамадным фреймворком, автоматическим сборщиком мусора и полностью безопасным кодом. Твой усыпан протухшими указателями, мемори-ликами и циклическими ссылками. У тебя уходит 50% времени на движение вперёд, 50% на уворачивание от граблей и ремонт ходуль. У них 50% так же на движение (но несравненно быстрое), 50% на изучение марштута, полировку своих тачек и определение стратегии движения.

    Они конечно не умеют как ты ловко двигаться по пересечённой местности, но фору они тебе могут дать не слабую. Потому что ты большой специалист по решению мелких задач, а они работают по крупному, т.к. за то же время могут сделать в 2-3 раза больше."
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 20-12-2005 22:05    
    Кстати, немного не по теме, но все же. Как на великом и могучем С++ реализовать следующую функцию:
    public string[] Process(string[] inputArray)
    		{
    			ArrayList resArr = new ArrayList();
    			foreach (string s in inputArray)
    				if(s != null && s.StartsWith("AB"))
    					resArr.Add(s);
    			return resArr.ToArray(typeof (string)) as string[];
    		}
    

    Идея должна быть понятна, даже не знакомому с плюсами ;)
    Интересует внешний вид функции, и как уничтожать ненужные строки.
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 21-12-2005 12:41    
    //DelStartEqual
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    /*
    public string[] Process(string[] inputArray)
                    {
                            ArrayList resArr = new ArrayList();
                            foreach (string s in inputArray)
                                    if(s != null && s.StartsWith("AB"))
                                            resArr.Add(s);
                            return resArr.ToArray(typeof (string)) as string[];
                    }
    */
    typedef vector<string> LS;
    
    
    void printArray(LS& ar) {
      
      for(int i = 0; i < ar.size(); i++) {
        cout << ar[i] << endl;
      }
      cout << "All elements is: " << ar.size() << endl;
    }
    
    void  initArray(LS& arr) {
      string line;
      while(getline(cin, line)) {
        arr.push_back( line );
      }
    }
    
    void  deleteVectorElement(LS& arr, int index) {
      arr[index] = arr.back();
      arr.pop_back();
    }
    
    void  deleteStartSub(LS& arr, const string& sub) {
       for( int i = 0; i < arr.size(); i++) {
         if(arr[i].substr(0, sub.length()) == sub) {
            deleteVectorElement(arr, i);
            --i; //Проверим элемент с тем же индексом
         }
       }
    }
    
    
    int main() {
      LS StartArray;
      string test("AB");
      
      initArray(StartArray);
      printArray(StartArray);
      deleteStartSub(StartArray, test);
      cout << "test string is: '" << test << "', length= " << test.length() << endl;
      cout << "=======After delete string start with AB===" << endl;
      printArray(StartArray);
    
    }
    
    
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 21-12-2005 12:47    
    блин ввод постоянно форматируется ;-)) не могу нормально пост полать
    data------------------------------------------
    AB
      AB and
    ewrewrsefrtesgt ertret
    ABsorbzia
    wrwer
    
    xcdvc
    dvdsv
    sddsfsdfgdsf
    sdfd
    AB
    A
    result----------------------------------------
    AB
      AB and
    ewrewrsefrtesgt ertret
    ABsorbzia
    wrwer
    
    xcdvc
    dvdsv
    sddsfsdfgdsf
    sdfd
    AB
    A
    All elements is: 12
    test string is: 'AB', length= 2
    =======After delete string start with AB===
    A
      AB and
    ewrewrsefrtesgt ertret
    sdfd
    wrwer
    
    xcdvc
    dvdsv
    sddsfsdfgdsf
    All elements is: 9
    

    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 21-12-2005 12:53    
    2 NuINu:
    Комменты по твоему коду, хоть и пришлось разбираться долго ;)
    1. нет проверки на null
    2. портим исходный массив
    3. я не могу назвать это понятным кодом :)
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 21-12-2005 13:10    
    2 FvS: 2- а я его намеренно порчу, потому как он мне нафиг не сдался ;-)) ну ладно можно так
    LS  deleteStartSub(LS& arr, const string& sub) {
      LS* t1 = new LS; 
      for( int i = 0; i < arr.size(); i++) {
         if(arr[i].substr(0, sub.length()) != sub) {
            t1->push_back(arr[i]);
         }
       }
      return *t1;
    }
    

    не проверял.... но уже то что нужно потом этот t1 ручками удалять не очень нравиться. но наверное можно по другому...

     
    Сообщение было изменено администратором 21-12-2005 в 14:06
    Force 

    регистрация: 06-12-2001 в 00:09
    сообщений: 20128

    отправлено 21-12-2005 13:31    
    2 NuINu:
    Блин, я придумываю примеры, значит я знаю, нужен в дальнейшем этот массив или нет ;)
    Соответственно, из-за


    но уже то что нужно потом этот t1 ручками удалять не очень нравиться.


    Я и написал этот пример ;)
    Именно вопрос - где и когда удалять этот t1, при условии, что мы в функции не знаем, что и как будет использоваться из этого t1 (условно, получили на вход массив, отдали его, потом кому-нить очень нужен первый элемент оттуда и он его за собой таскает, а может и все надо, а исходный массив строк не нужен).
    В общем, где избавляться от этого страшного зверя мемликера :)
    Decker 

    регистрация: 09-08-2004 в 15:13
    сообщений: 1403

    отправлено 21-12-2005 13:41    
    вот вам вся могучесть с++
    на код шарпа достаточно взгляда, чтобы понять, что в нем происходит...
    а здесь пришлось написать 4 доп метода, с которым разобраться еще надо :)
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 21-12-2005 14:55    
    Спокона!!!!!! ненадо паники, чичас переделаем ;-))
    //DelStartEqual
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    /*
    public string[] Process(string[] inputArray)
                    {
                            ArrayList resArr = new ArrayList();
                            foreach (string s in inputArray)
                                    if(s != null && s.StartsWith("AB"))
                                            resArr.Add(s);
                            return resArr.ToArray(typeof (string)) as string[];
                    }
    */
    typedef vector<string> LS;
    
    
    void printArray(LS& ar) {
      
      for(int i = 0; i < ar.size(); i++) {
        cout << ar[i] << endl;
      }
      cout << "All elements is: " << ar.size() << endl;
    }
    
    void  initArray(LS& arr) {
      string line;
      while(getline(cin, line)) {
        arr.push_back( line );
      }
    }
    
    
    LS  deleteStartSub(const LS& arr, const string& sub) {
       LS n;
       for( int i = 0; i < arr.size(); i++) {
         if(!(&arr[i] == NULL) && (arr[i].substr(0, sub.length()) == sub)) {
         } else {
            n.push_back(arr[i]);
         }
       }
       return n;
    }
    
    
    int main() {
      LS StartArray, EndArray;
      string test("AB");
      
      initArray(StartArray);
      printArray(StartArray);
      EndArray = deleteStartSub(StartArray, test);
      cout << "test string is: '" << test << "', length= " << test.length() << endl;
      cout << "=======After delete string start with AB===" << endl;
      printArray(EndArray);
    
    }
    
    

    Собсно вот ;-)) результат такой же, да я там с указателями лажанулся, не надо их - лучше конструктор копирования в стеке, там и копируется то ерунда пара указателей да счетчик. А деструктор нормально вызовется. Вообщем СИ - РУЛЕЗ ! ;-))
    NuINu 

    регистрация: 09-04-2004 в 16:36
    сообщений: 2450

    отправлено 21-12-2005 15:03    
    Ай баг в уловиях вборки... ну Форс поправит ;-))

    Я там вообще то не то выбираю ;-))) там ведь надо все с АВ строки выбрать??? а я то их удаляю ;-))

    вот функция с правильным выбором:
    LS  deleteStartSub(const LS& arr, const string& sub) {
       LS n;
       for( int i = 0; i < arr.size(); i++) {
         if((&arr[i] != NULL) && (arr[i].substr(0, sub.length()) == sub)) {
            n.push_back(arr[i]);
         }
       }
       return n;
    }
    


    result ----------------------------------
    AB
    AB and
    ewrewrsefrtesgt ertret
    ABsorbzia
    wrwer

    xcdvc
    dvdsv
    sddsfsdfgdsf
    sdfd
    AB
    A
    All elements is: 12
    test string is: 'AB', length= 2
    =======After delete string start with AB===
    AB
    ABsorbzia
    AB
    All elements is: 3
    Svan 

    регистрация: 12-11-2001 в 17:25
    сообщений: 3141

    отправлено 21-12-2005 15:18    
    function Process( $arStr )
    {
    	if( !is_array( $arStr ) )
    		return false;
    	$resArr = array();
    	foreach( $arStr as $str )
    	{
    		if( is_string( $str ) && substr( $str, 0, 2) == 'AB' )
    		$resArr[] = $str;
    	}
    	return $resArr;
    }
    


    Смеха ради. Это PHP. Все возражения и так знаю.

    PS. На Mono сейчас работают вполне серьёзные коммерческие проекты, причём очень такой "технологической направленности". Например, небезызвестный российский VoIP-ный свич "MERA".
     
    Сообщение было изменено автором 21-12-2005 в 15:24
    Страницы: 1 2