Как поменять отдельные слова? - PullRequest
0 голосов
/ 23 сентября 2010

Мне нужно преобразовать строку, такую ​​как «меня зовут Томос», в «ym eman si somoht».Что мне нужно знать, чтобы сделать это?

Ответы [ 5 ]

5 голосов
/ 23 сентября 2010

Одной из возможностей будет использование std::copy с парой std::reverse_iterator с, которые вы можете получить с rbegin и rend.

Наряду с этим, вы, вероятно, захотитеиспользуйте что-то вроде std::istringstream, чтобы разбить строку на слова для обработки.

1 голос
/ 23 сентября 2010

Я не буду предоставлять код, так как он пахнет слишком похоже на домашнюю работу.Но я постараюсь подтолкнуть вас в правильном направлении.

Сначала вам нужно будет разделить предложение на слова.Вы можете сделать это, читая его из потока (поток строки будет делать, если у вас есть его в строке) в строку, используя operator>>(std::istream&,std::string&).

Затем вы должны обратить отдельные строки.Вы можете сделать это, используя std::reverse() из стандартной библиотеки C ++.
Тогда все, что вам нужно сделать, это записать слова в некоторый выходной поток, вставив между ними пробелы.

В качестве альтернативы вы можете вывести строки слов в обратном порядке, как предложил Джерри.

0 голосов
/ 11 декабря 2013
public static void main(String[] args) {

    StringBuffer buffer=new StringBuffer();
    buffer.append("my name is thomos");
    buffer.reverse();
    String str=buffer.toString();
    String arr[]=str.split(" ");
    int length=arr.length;
    for(int i=length-1;i>=0;i--)
    {
        System.out.print(arr[i]+" ");
    }


}

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

логика сначала обратнаявсю строку, тогда мы получим

"somoht si eman ym"

, затем мы разделим эту строку, используя пробел, чтобы мы получили отдельную строку

затем мы просто хотим выполнить итерацию с конца массива и распечатать его или сохранить в новом массиве. Мы получим вывод в виде

"ym eman si somoht"

0 голосов
/ 23 сентября 2010

Если вы подходите к этому с точки зрения строки в стиле c (как я делал в первый раз, когда делал эту задачу для домашней работы), вы можете попробовать некоторые указатели.Вот основной порядок операций, которые я прошел.Если вы используете std :: string, я уверен, что это не сработает, но это возможно.Это действительно предназначено для строк в стиле c и обучения людей использованию указателей.

Создайте 2 указателя и символ временной замены.

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

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

0 голосов
/ 23 сентября 2010

Используйте strtok, чтобы разбить на слова Для каждого слова переверните строку и добавьте к выводу вместе с пробелом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...