Простая задача
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.42] |
|
|
Правила раздела:
| Страницы: (5) « Первая ... 2 3 [4] 5 все ( Перейти к последнему сообщению ) |
Простая задача
|
Сообщ.
#46
,
|
|
|
|
И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда… ![]() ![]() main = putStrLn $ unwords $ reverse $ words "мама мыла раму" |
|
Сообщ.
#47
,
|
|
|
|
Цитата korvin @ Да ты просто не осилил плюсы! И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда… ![]() Ана жабе кто-нибудь пример приведет? Там по-моему будет еще страшнее, чем в плюсах, или я не прав? |
|
Сообщ.
#48
,
|
|
|
|
Не, korvin, это как всегда захотелось выпендриться. Нормально если
![]() ![]() 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 |
|
Сообщ.
#49
,
|
|
|
|
Цитата Qraizer @ Не, korvin, это как всегда захотелось выпендриться. Нормально если ![]() ![]() 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 на бусте. |
|
Сообщ.
#50
,
|
|
|
|
Вообще вы сравниваете скорее стандартные библиотеки(или встроенные в язык сложные типы), чем сами языки. На бусте примерно так же все выглядит.
Можем еще скорости посравнивать и посмотреть, победит ли C и насколько. |
|
Сообщ.
#51
,
|
|
|
|
Цитата D_KEY @ Ну с регекспами ты точно далеко не уйдешь Можем еще скорости посравнивать и посмотреть, победит ли C и насколько. Добавлено Цитата Qraizer @ ![]() ![]() 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 |
|
Сообщ.
#52
,
|
|
|
|
Цитата applegame @ Цитата D_KEY @ Ну с регекспами ты точно далеко не уйдешь Можем еще скорости посравнивать и посмотреть, победит ли C и насколько. ![]() Наверное. Но я про Си говорил, т.е. что-нить в духе: ![]() ![]() 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); Я не проверял, мог ошибиться |
|
Сообщ.
#53
,
|
|
|
|
Цитата D_KEY @ Ну на таком низком уровне сяшка, полагаю, побьет по скорости всех. Наверное. Но я про Си говорил, т.е. что-нить в духе: |
|
Сообщ.
#54
,
|
|
|
|
Классическая ошибка http://ideone.com/y8CGcR Добавлено Кстати, это тоже не в пользу плюсов говорит. Добавлено И лучше так поправить, да http://ideone.com/99nicx Добавлено Заодно сишный вариант(надо же, сразу заработало, подозрительно) http://ideone.com/3K1ST6 |
|
Сообщ.
#55
,
|
|
|
|
Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель?
Добавлено Цитата D_KEY @ Заодно сишный вариант(надо же, сразу заработало, подозрительно) если программа заработала с первого раза - жди подвоха |
|
Сообщ.
#56
,
|
|
|
|
Цитата applegame @ Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель? Ты про какой из вариантов? |
|
Сообщ.
#57
,
|
|
|
|
Цитата D_KEY @ Про Qraizer'овский. Ты про какой из вариантов? |
|
Сообщ.
#58
,
|
|
|
|
Цитата applegame @ Цитата D_KEY @ Про Qraizer'овский.Ты про какой из вариантов? Да, вроде там просто так сепаратор не задашь в таком варианте. Но можно через std::getline сделать, например. |
|
Сообщ.
#59
,
|
|
|
|
Цитата applegame @ А я и не компилял. Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы. Первый параметр нужно в скобочки взять.![]() ![]() std::vector<std::string> buf((std::istream_iterator<std::string>(str)), std::istream_iterator<std::string>()); |
|
Сообщ.
#60
,
|
|
|
|
Ну, как-то так:
![]() ![]() #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; } |