Рейтинг:
29
Sergey Alexandrovich Kryukov
Мы делаем за тебя домашнее задание, мы помогаем людям. Вы действительно заинтересованы в том, чтобы делать домашнее задание самостоятельно. Вам дают сдачу, чтобы развить некоторые навыки, не теряйте ее, она окупится в ближайшем будущем.
Если вы застряли и можете четко сформулировать свою проблему и предоставить небольшой и самосогласованный образец кода, демонстрирующий вашу проблему, мы с радостью поможем вам.
Удачи,
—СА
Awa_tcp
вы, ребята, только комментируете, а не помогаете ... вы дали какой-то правильный ответ..
ShilpiP
Как ты можешь так говорить? Здесь нет никого, кто бы делал твою работу. Вы должны прийти со своим кодом и с конкретной проблемой.
ShilpiP
1) http://www.codeguru.com/forum/showthread.php?t=303185
2) http://www.cplusplus.com/forum/general/2876/
3) http://anaturb.net/C/string_exapm.htm
4) http://www.cplusplus.happycodings.com/Algorithms/code26.html
Sergey Alexandrovich Kryukov
Могу я проголосовать за это? :-)
Что касается вашего замечания выше, пожалуйста, смотрите комментарии ниже... :-)
--СА
ShilpiP
Нет... Я просто хочу понять того парня, что поиск в Google даст n количество ответов ...
Я думаю, что вы не видели моего вышеприведенного комментария.
- Как ты можешь так говорить? Здесь нет никого, кто бы делал твою работу. Вы должны прийти со своим кодом и с конкретной проблемой."
Sergey Alexandrovich Kryukov
Это ваше замечание-именно то, что я имел в виду. Я имею в виду: что вы думаете о поведении ОП? Довольно забавно - смотрите ниже :-)
--СА
ShilpiP
На самом деле я чувствую себя плохо из-за его поведения, чтобы поговорить со старшим. Но твое замечание заставляет меня улыбнуться. Идеальный комментарий :) У меня есть 5 за ваш комментарий а не ваш ответ ;)
Sergey Alexandrovich Kryukov
Спасибо, но жаль, что вам не понравился мой ответ. :-) На этот раз довольно стандартный.
--СА
ShilpiP
хахаха. Вы понимаете это неправильно. Это был PJ (плохая шутка) :).специально для этой темы я злился за комментарий op. Еще одна вещь, которую некоторые люди здесь искренне хотят помочь другим, и для меня вы тот самый :). У вашего ответа всегда есть стандарт. :)
Sergey Alexandrovich Kryukov
Спасибо за ваши добрые слова-извините, я не знаю, как называть вас по имени...
--СА
Sergey Alexandrovich Kryukov
Спасибо.
--СА
Awa_tcp
Привет,
Извините за вчерашнее поведение.
На самом деле я был немного напряжен.
Еще раз прошу прощения..
Спасибо
Sergey Alexandrovich Kryukov
Нет проблем, давай забудем об этом.
--СА
Awa_tcp
Привет;
Извините за вчерашнее поведение.
На самом деле я был немного напряжен.
Еще раз прошу прощения..
Спасибо
Sergey Alexandrovich Kryukov
Нет проблем, давай забудем об этом.
--СА
Sergey Alexandrovich Kryukov
Это помощь, вы только не хотите ее получить.
--СА
Sergey Alexandrovich Kryukov
Слишком поздно...
Если бы Вы были так горды, то не стали бы просить о помощи, что, откровенно говоря, является чистым мошенничеством. Но ты сделал это, так что после этого ты не сможешь никого впечатлить, сказав, что тебе не нужна моя помощь. Слишком поздно. :-)
--СА
Рейтинг:
20
Christian Graus
Это очень просто. Очевидно, это домашнее задание, поэтому я не буду его делать ( но я уверен, что какой-нибудь идиот, который больше заботится о том, чтобы получить ваш голос, чем о том, чтобы помочь вам учиться, будет ). Ты ведь знаешь, как пройти по струне в петле, верно ? Вы знаете, что можете посмотреть на каждый символ по индексу ? Если вы ищете и находите пробелы, то вы нашли каждое слово и можете скопировать это слово в свою новую строку. Сейчас, пойти на это !!!
Christian Graus
Единственный способ сделать это на месте-это проработать свои позиции букв перед рукой, а затем начать менять символы так, как я описал.
Рейтинг:
2
Stefan_Lang
Вот одна концепция, которая требует минимального временного хранения, хотя она безнадежно неэффективна (если бы вы хотели быть эффективными, вы бы не пытались начать с разворота на месте!):
1. Начните с написания функции, которая меняет местами два соседних слова в строке. Следите за случаями, когда целевое местоположение копии перекрывает источник!
2. продолжите работу с функцией, реализующей перестановку двух произвольных слов в виде ряда соседних словосочетаний.
3. Создайте функцию, которая определяет пары слов, которые вам нужно поменять местами.
4. затем напишите функцию, которая выполняет необходимый разворот в терминах отдельных словесных свопов.
Emilio Garavaglia
Не эффективно, но элегантно!
Sergey Alexandrovich Kryukov
Извините, но я тоже не думаю, что это элегантно. Вы просто разделяете исходный код на ' ', а затем регенерируете строку с помощью обратной итерации.
--СА
Stefan_Lang
"регенерация"-это не "на месте", что является требованием задачи.
Мое предложение требует от вас только временного хранения одного слова за раз, перемещая другие слова вокруг, прямо в исходном массиве. Я не говорю, что это эффективно, но если бы это было требованием, то переупорядочение строки "на месте" определенно было бы неправильным способом начать.
Sergey Alexandrovich Kryukov
О... Я вижу. Означает ли это мою перестановку той же строки? Тогда он никогда не будет строго на месте, так как вам нужен буфер для временного фрагмента. И все же я не вижу пользы от вашего решения, извините. Я бы сделал это лучше, я думаю. Как насчет алгоритма:
1) Начните с написания функции, которая перемещает крайнюю левую работу в самую правую
2)... и так далее.
Предварительно подсчитайте количество слов....
--СА
Stefan_Lang
В соответствии с http://en.wikipedia.org/wiki/In-place_algorithm алгоритм на месте делает две вещи:
1. перепишите входные данные с выходными данными
2. Используйте не более O(1) дополнительной памяти для временных и вспомогательных переменных.
Последнее, строго говоря, делает недействительными все алгоритмы, которые хранят целое слово из этого предложения, потому что мы не можем легко определить постоянный размер, достаточный для хранения любого слова. (мы можем сделать это с некоторыми предположениями об используемом языке и допустимости сложных слов, но есть языки, такие как немецкий, которые позволяют создавать сложные слова практически неограниченного размера!)
Sergey Alexandrovich Kryukov
Да, это вполне логично. Что касается алгоритма, то я по-прежнему придерживаюсь своего мнения... :-)
--СА
Sergey Alexandrovich Kryukov
Так что на этот раз я не голосовал... :-)
--СА
Рейтинг:
1
Alain Rist
У вас есть много ссылок на С или С-подобный решения, это рабочий процесс. С++ один, конечно, не подходит для вашего домашнего задания, может быть, пригодится позже:
// ReverseWords.cpp : Defines the entry point for the console application.
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
void ReverseWords(char* str)
{
vector<string> words;
istringstream iss(str);
copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(words));
ostringstream oss;
copy(words.rbegin(), words.rend(), ostream_iterator<string>(oss, " "));
copy_n(&oss.str().front(), oss.str().length() - 1, str);
}
int main()
{
char str[] = "the house is blue";
cout << str << endl;
ReverseWords(str);
cout << str << endl;
return 0;
}
овации,
АР
Sergey Alexandrovich Kryukov
Выглядит неплохо, мой 5-й.
--СА
Stefan_Lang
Хороший алгоритм, но не на месте. Видишь ли http://en.wikipedia.org/wiki/In-place_algorithm