Awa_tcp Ответов: 6

Как перевернуть строку(слово за словом) на место ?


Привет,


Мне нужно перевернуть строку "слово за словом" .

Переверните строку слово за словом, на месте.

например
если наша строка является - дом голубой.”,
возвращаемое значение будет следующим “синий-это дом the”.

Слова перевернуты, но буквы по-прежнему в порядке (внутри слова).

Теперь проблема в том, как это можно сделать?

Спасибо

ThatsAlok

похоже на домашнюю работу, однако вы можете использовать AfxExtractSubString, чтобы получить уникальную строку из строки

6 Ответов

Рейтинг:
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

Спасибо за ваши добрые слова-извините, я не знаю, как называть вас по имени...
--СА

ShilpiP

Шилпи :)

Sergey Alexandrovich Kryukov

Спасибо.
--СА

ShilpiP

:)

Awa_tcp

забавный

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

Рейтинг:
0

Abhinav S

Это очень стандартный вопрос для домашнего задания.
Однако, смотрите этот[^]. Надеюсь, что это поможет вам.


Stefan_Lang

К сожалению, это решение переворачивает слова, а не последовательность слов в строке, как требуется.

Рейтинг:
0

ThatsAlok

похоже на домашнюю работу, однако вы можете использовать AfxExtractSubString, чтобы получить уникальную строку из строки, остальное, я не думаю, что будет трудно для вас!