На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (5) « Первая ... 2 3 [4] 5  все  ( Перейти к последнему сообщению )  
> Простая задача
    Цитата applegame @
    Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста.

    И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда…

    ExpandedWrap disabled
      main = putStrLn $ unwords $ reverse $ words "мама мыла раму"
      Цитата korvin @
      И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда…
      Да ты просто не осилил плюсы! :sarcasm:

      Ана жабе кто-нибудь пример приведет? Там по-моему будет еще страшнее, чем в плюсах, или я не прав?
      Сообщение отредактировано: applegame -
        Не, korvin, это как всегда захотелось выпендриться. Нормально если
        ExpandedWrap disabled
          std::istringstream       str("мама мыла раму");
          std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>());
           
          for (auto i = buf.rbegin(); i != buf.rend(); ++i)
            std::cout << *i << ' ';


        К тому же это почти C++98, только auto заменить на какой-нибудь std::vector<std::string>::const_reverse_iterator
        Сообщение отредактировано: Qraizer -
          Цитата Qraizer @
          Не, korvin, это как всегда захотелось выпендриться. Нормально если
          ExpandedWrap disabled
            std::istringstream       str("мама мыла раму");
            std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>());
             
            for (auto i = buf.rbegin(); i != buf.rend(); ++i)
              std::cout << *i << ' ';

          Да все равно же вырвиглазно. Самое красявое плюсовое решение привел, ИМХО, D_KEY на бусте.
          Сообщение отредактировано: applegame -
            Вообще вы сравниваете скорее стандартные библиотеки(или встроенные в язык сложные типы), чем сами языки. На бусте примерно так же все выглядит.
            Можем еще скорости посравнивать и посмотреть, победит ли C и насколько.
              Цитата D_KEY @
              Можем еще скорости посравнивать и посмотреть, победит ли C и насколько.
              Ну с регекспами ты точно далеко не уйдешь :)

              Добавлено
              Цитата Qraizer @
              ExpandedWrap disabled
                std::istringstream       str("мама мыла раму");
                std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>());
                 
                for (auto i = buf.rbegin(); i != buf.rend(); ++i)
                  std::cout << *i << ' ';

              Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы. Поправьте кто-нибудь - http://ideone.com/ljftIF
                Цитата applegame @
                Цитата D_KEY @
                Можем еще скорости посравнивать и посмотреть, победит ли C и насколько.
                Ну с регекспами ты точно далеко не уйдешь :)

                Наверное. Но я про Си говорил, т.е. что-нить в духе:
                ExpandedWrap disabled
                      char str[] = "мама мыла раму";
                      char *p = str;
                      while (*p) {
                          if (*p == ' ')
                              *p = '\0';
                          ++p;
                      }
                      --p;
                      while (p != str) {
                          if (*p == '\0')
                              printf("%s ", (p + 1));
                          --p;
                      }
                      printf("%s\n", p);

                Я не проверял, мог ошибиться :)
                  Цитата D_KEY @
                  Наверное. Но я про Си говорил, т.е. что-нить в духе:
                  Ну на таком низком уровне сяшка, полагаю, побьет по скорости всех.
                    Цитата applegame @
                    Поправьте кто-нибудь - http://ideone.com/ljftIF

                    Классическая ошибка
                    http://ideone.com/y8CGcR

                    Добавлено
                    Кстати, это тоже не в пользу плюсов говорит.

                    Добавлено
                    И лучше так поправить, да
                    http://ideone.com/99nicx

                    Добавлено
                    Заодно сишный вариант(надо же, сразу заработало, подозрительно)
                    http://ideone.com/3K1ST6
                      Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель?

                      Добавлено
                      Цитата D_KEY @
                      Заодно сишный вариант(надо же, сразу заработало, подозрительно)
                      :D если программа заработала с первого раза - жди подвоха :lol:
                      Сообщение отредактировано: applegame -
                        Цитата applegame @
                        Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель?

                        Ты про какой из вариантов?
                          Цитата D_KEY @
                          Ты про какой из вариантов?
                          Про Qraizer'овский.
                            Цитата applegame @
                            Цитата D_KEY @
                            Ты про какой из вариантов?
                            Про Qraizer'овский.

                            Да, вроде там просто так сепаратор не задашь в таком варианте. Но можно через std::getline сделать, например.
                              Цитата applegame @
                              Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы.
                              А я и не компилял. :wub: Первый параметр нужно в скобочки взять.
                              ExpandedWrap disabled
                                std::vector<std::string> buf((std::istream_iterator<std::string>(str)), std::istream_iterator<std::string>());
                              Сообщение отредактировано: Qraizer -
                                Ну, как-то так:
                                ExpandedWrap disabled
                                  #include "stdafx.h"
                                  #include <stdio.h>
                                  #include <iostream>
                                  #include <vector>
                                  #include <algorithm>
                                   
                                  typedef std::vector<int> Digits;
                                  Digits split_to_digits(int input)
                                  {
                                      std::vector<int> digits;
                                      while (0 < input)
                                      {
                                          int next = input / 10;
                                          digits.push_back(input - next*10);
                                          input = next;
                                      }
                                      return digits;
                                  }
                                   
                                  int calc_closest_quasibin(int input)
                                  {
                                      int result = 0;
                                      Digits digits = split_to_digits(input);
                                      for(Digits::reverse_iterator it = digits.rbegin(); it != digits.rend(); ++it)
                                      {
                                          int D = *it;
                                          result *= 10;
                                          if (0 < D)
                                              ++result;
                                      }
                                      return result;
                                  }
                                   
                                  void print_int(int sum)
                                  {
                                      std::cout << sum << " ";
                                  }
                                   
                                  int _tmain(int argc, _TCHAR* argv[])
                                  {
                                      int X;
                                      std::cin >> X;
                                      std::vector<int> summands;
                                      int B;
                                      do
                                      {
                                          B = calc_closest_quasibin(X);
                                          X -= B;
                                          summands.push_back(B);
                                      } while (0 < X);
                                   
                                      std::cout << summands.size() << std::endl;
                                      std::for_each(summands.begin(), summands.end(), print_int);
                                      return 0;
                                  }
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1053 ]   [ 14 queries used ]   [ Generated: 8.07.26, 03:59 GMT ]