Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
#1

Сделать так что б в строке все слова были напечатаны наоборот - C++

13.01.2012, 17:00. Просмотров 2413. Ответов 12
Метки нет (Все метки)

Помогите пожайлуста:
Преобразовать строку таким образом, чтобы все слова в ней были напечатаны наоборот (зеркально).
Я сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
 
using namespace std;
 
int main(int argc, char * argv[])
{
        string strLine("Tupo Tekst");
        copy(strLine.rbegin(), strLine.rend(), ostream_iterator<char>(cout, ""));
        cout << '\n';
 
        system("pause");
        return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!


Мне сказали что програма не выполняет поставленой задачи...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2012, 17:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сделать так что б в строке все слова были напечатаны наоборот (C++):

Преобразовать строку таким образом, чтобы все слова в ней были напечатаны наоборот - C++
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В конце...

Преобразовать строку таким образом, чтобы все слова в ней были напечатаны наоборот - C++
Помогите пожалуйста исправить программу Преобразовать строку таким образом, чтобы все слова в ней были напечатаны наоборот. ...

Преобразовать строку таким образом, чтобы все символы в ней были напечатаны наоборот - C++
Преобразовать строку таким образом, чтобы все символы в ней были напечатаны наоборот. Помогите пожалуйста!

Превратить строку так, чтобы сначала в ней были напечатаны только буквы, а потом только цифры - C++
Превратить строку так, чтобы сначала в ней были напечатаны только буквы, а потом только цифры, не меняя порядка прохождения символов в...

Как сделать так что бы массив выводил наоборот - C++
Как сделать так что бы массив выводил наоборот???

программа переставляет слова в строке наоборот - C++
программа переставляет слова в строке наоборот, как ее дописать чтобы она ни слова а буквы переставляла #include &lt;string.h&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
13.01.2012, 17:11 #2
используйте алгоритм reverse()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    string x; 
    cin >> x;
    reverse(x.begin(), x.end());
    cout << x << endl;
    return 0;
}
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
13.01.2012, 17:27 #3
Предполагаю, что все слова разделены в строке пробелами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <sstream>
using namespace std;
 
int main() {
    string word, strLine("One Two Three");
    istringstream stream( strLine );
    strLine.clear();
    while ( stream >> word ){
        strLine.append( word.rbegin(), word.rend());
        strLine.append(" ");
    }
    cout << strLine;
    return 0;
}
2 Vergil111 - у Вас переворачивает всю строку, а не слова отдельные.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
13.01.2012, 18:47 #4
Проглядел, проглядел в задании, каюсь,
Roof=)
Тогда нам помогут лямбда-выражения=)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <iterator>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> text((istream_iterator<string>(cin)),
                                     (istream_iterator<string>()));
    for_each(text.begin(), text.end(), [](string& s){ reverse(s.begin(), s.end());});
    copy(text.begin(), text.end(), ostream_iterator<string>(cout, " "));
    cout << endl;
    return 0;
}
окончания ввода строки в консоли Windows Enter, затем на новой строчке Ctrl+z и опять Enter
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
14.01.2012, 16:43  [ТС] #5
Мне написали что программа всё ещё не выполняет поставленную задачу....
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
14.01.2012, 17:49 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <algorithm>
#include <string>
 
int main()
{
    std::string s;
    std::cout << "input string: ";
    std::getline(std::cin, s);
 
    const std::string delim = " ,.:;!?";
    size_t pos_start = s.find_first_not_of(delim);
    size_t pos_end = s.find_first_of(delim, pos_start);
 
    while((pos_start != std::string::npos))
    {
        if(pos_end == std::string::npos)
        {
            std::reverse(s.begin() + pos_start, s.end());
            break;
        }
 
        std::reverse(s.begin() + pos_start, s.begin() + pos_end);
        pos_start = s.find_first_not_of(delim, pos_end);
        pos_end = s.find_first_of(delim, pos_start);
    }
 
    std::cout << "result: " << s << "\n";
}
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
18.01.2012, 00:37  [ТС] #7
мне сказали: что программа Всё ещё не выполняет поставленной задачи....
я кажется понял как надо но сам не могу сделать (пример: privet vsem - mesv tevirp), помогите пожайлуста...
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
18.01.2012, 11:30 #8
Ну вот пример , проще некуда :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 //privet vsem - mesv tevirp
 
// .......... на С++ ..............
 
#include<iostream>
#include <conio.h>
 
using namespace std;
 
int main() {
    int i;
     int index = 11;
     char arr[11] = {'p' ,'r','i' ,'v' ,'e' ,' t',' ','v' ,'s' ,'e' ,'m'};
 
     //     читаем строку 
 
      for( i = 0; i < index; i++)
        cout << arr[i] ;
 
 
    //     читаем строку с конца массива
     cout << "\t";
 
     for( i = (index - 1); i > 0 ; i--)
        cout << arr[i] ;
     _getch();
}
Добавлено через 9 часов 55 минут
Во втором цикле опечатка .Вот так нужно :
C++
1
  for( i = (index-1); i > -1 ; i--)
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
18.01.2012, 13:54 #9
я кажется понял как надо но сам не могу сделать (пример: privet vsem - mesv tevirp), помогите пожайлуста...
Переделал чуток пример от Vergil111 из поста #2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main() {
    cout << "Введите строку" << endl;
    string x;
    getline( cin, x );
    reverse( x.begin(), x.end() );
    cout << x << endl;
    return 0;
}
Консоль
Введите строку
privet vsem
mesv tevirp
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.01.2012, 14:38 #10
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
я кажется понял как надо но сам не могу сделать (пример: privet vsem - mesv tevirp), помогите пожайлуста...
Это реверс всей строки, а не слов, в нее входящих. И думать тут особо не нужно.
C++
1
2
3
std::string str;
std::getline(std::cin, str);
std::cout << std::string( str.rbegin(), str.rend() );
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
18.01.2012, 20:57  [ТС] #11
Цитата Сообщение от Roof Посмотреть сообщение
Переделал чуток пример от Vergil111 из поста #2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main() {
    cout << "Введите строку" << endl;
    string x;
    getline( cin, x );
    reverse( x.begin(), x.end() );
    cout << x << endl;
    return 0;
}
Консоль
Введите строку
privet vsem
mesv tevirp

Мне сказали почему порядок слов изменён?? как сделать что б порядок не изменялся?
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
18.01.2012, 21:29 #12
2 Сергейййййййй - а ты ведь написал:
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
я кажется понял как надо но сам не могу сделать (пример: privet vsem - mesv tevirp), помогите пожайлуста...
Зачем в пример приводил?
Сформулируй задачу четко и ясно. Приведи пример входных данных и пример выходных данных.
А то не понять чего ты хочешь.
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
19.01.2012, 01:52  [ТС] #13
извините за предоставленные неудобства с моей стороны,я просто предполагал что пример будит выглядеть так...,но на самом деле он выглядит вот так: (one two three - eno owt eerht).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2012, 01:52
Привет! Вот еще темы с ответами:

Определить, верно ли, что в строке встречаются все буквы из слова step - C++
Уважаемые программист не сочтите за наглость ну очень прошу вас помочь выполнить вот эти задания. Дана строка символов. Верно ли, что...

Преобразовать строку так, чтобы буквы каждого слова были остортированы по возрастанию - C++
Подскажите идею,как можно преобразовать строку так,чтобы буквы каждого слова были остортированы по возрастанию?

Как сделать так , чтобы если все 3 условия не выполняются , то вывести что то - C++
Задача на проверку : &quot;принадлежат ли числа к &quot; . Написал по одному , что принадлежит , что не принадлежит . А как сделать так , чтобы если...

Как сделать так, чтобы функции были не вложенными? - C++
получается так, что сначала у меня идет функция int main(), потом int sum, и потом int maxx. Они получаются вложенными в int main(). Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.01.2012, 01:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru