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

Нужно в предложении каждое слово вывести наоборот - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Enpsydi
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
19.03.2013, 21:45     Нужно в предложении каждое слово вывести наоборот #1
Т.е. дано, к примеру, предложение (любые символы разделенные пробелами): ab cd ef, программа должна вывести ba dc fe.
Вот я написал код, протестировал, ошибок невыдает, но выводит только первое слово наоборот, а про остальные забывает...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
...
/*Уже существует строка bup. Здесь кусок программы, который должен был записать слова
 наоборот */
k=0;
for (i=0;i<=j-1;i++) // j - длина строки bup, поэтому j-1, чтобы не выйти за массив
{
   if (bup[i]==' ')
   {for (j=i-1;j>=k;j--)
   cout<<bup[j];
   k=i+1; // k - флаг, до которого будут выводиться символы от следующего пробела
   }
}
...
Вообще, по моей задумке, должно было быть так:
Выполняетя основной цикл, где идет проверка для каждого символа в предложении
{ Если программа находит пробел, то
{
Этот цикл начинает выводить каждый символ начиная с символа ДО пробела, заканчивая символом под индексом k (в первый раз k=0, затем изменяется и принимает значение следующего индекса, где расположен пробел)
}
}
Весь код здесь:
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include<stdio.h>
 
void main ()
{
clrscr();
char str [80], bup[80];
int i,j=0,sch[80],l;
cout<<"Vvedite predlogenie\n";
gets(str);
int dl_str=strlen(str);
 
for (i=dl_str-1;i>=0;i--)
{bup[j]=str[i];
j++;}
bup[j]='\0';
j=strlen(bup);
cout<<"J = "<<j<<"\n";
 
cout<<"\nPromegutochnii rezultat:\n";
for (i=0;i<j;i++)
cout<<"Bup["<<i<<"] = "<<bup[i]<<"\n";
cout<<"\nI = "<<i<<"\n";
int k=0;
 
for (i=0;i<=j-1;i++)
{
   if (bup[i]==' ')
   {for (j=i-1;j>=k;j--)
   cout<<bup[j];
   k=i+1;
   }
}
 
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2013, 21:45     Нужно в предложении каждое слово вывести наоборот
Посмотрите здесь:

Нужно еще два способа (вывести введенное слово наоборот) C++
C++ нужно удалить и вывести все символы после *(его не нужно выводить). я смог наоборот вывести всё до него! помоите
Вывести каждое слово из файла на экран C++
Очереди. За один просмотр файла вывести на экран каждое третье слово, а затем каждое четвертое C++
В предложении вывести короткое слово C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,295
Завершенные тесты: 1
19.03.2013, 23:17     Нужно в предложении каждое слово вывести наоборот #2
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
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include<stdio.h>
 
void main ()
{
clrscr();
char str [80];
int i,j,l;
cout<<"Vvedite predlogenie\n";
gets(str);
i=0;
while(str[i]!=0)
{
for(;str[i]==' '&&str[i]!=0;i++) cout << str[i];
j=i;
for(;str[i]!=' '&&str[i]!=0;i++);
for(l=i-1;l>=j;l--) cout << str[l];
 
}
 
getch();
}
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
19.03.2013, 23:21     Нужно в предложении каждое слово вывести наоборот #3
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
30
#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <cstring>
 
using namespace std;
const int MAX=80;
void reversit(char mas[MAX])
    {
        for(int j=0; j<strlen(mas); j++)
        {
            char temp;
            temp=mas[j];
            mas[j]=mas[strlen(mas)-j];
            mas[strlen(mas)-j]=temp;
        }
    }
 
    int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    const int max=MAX;
    char str[max];
    cout <<"Введите выражение: ";
    cin.get(str,max);
    reversit(str);
    cout <<"\nВы ввели: " <<str <<endl;
    system("pause");
    return 0;
}
pdln2012
1 / 1 / 0
Регистрация: 15.10.2012
Сообщений: 7
20.03.2013, 00:02     Нужно в предложении каждое слово вывести наоборот #4
в последнем коде Kins предел цикла for надо ставить не strlen(mas), а strlen(mas)/2 чтоб строка реверсной оставалась

10 for(int j=0; j<strlen(mas)/2; j++)
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
20.03.2013, 00:26     Нужно в предложении каждое слово вывести наоборот #5
Цитата Сообщение от pdln2012 Посмотреть сообщение
10 for(int j=0; j<strlen(mas)/2; j++)
странно, я на str=4 проверил и 3х символах
pdln2012
1 / 1 / 0
Регистрация: 15.10.2012
Сообщений: 7
20.03.2013, 01:06     Нужно в предложении каждое слово вывести наоборот #6
Цитата Сообщение от Kins Посмотреть сообщение
странно, я на str=4 проверил и 3х символах
ну по логике, если у Вас есть строка длинной в 4 символа (например 1234) и вы примените свой алгоритм с циклом for(i = 0; i<4; i++), то после первой итерации у Вас строка измениться на 4231, после второй 4321, третей 4231, четвертой 1234

C++
1
2
3
4
5
6
7
8
9
10
void reversit(char mas[MAX])
    {
        for(int j=0; j<strlen(mas); j++)
        {
            char temp;
            temp=mas[j];
            mas[j]=mas[strlen(mas)-j];
            mas[strlen(mas)-j]=temp;
        }
    }
в этом случае mas[5]={1,2,3,4}; после вызова функции reversit будет равен 1234
C++
1
2
3
4
5
6
7
8
9
10
 void reversit(char mas[MAX])
    {
        for(int j=0; j<strlen(mas)/2; j++)
        {
            char temp;
            temp=mas[j];
            mas[j]=mas[strlen(mas)-j-1];
            mas[strlen(mas)-j-1]=temp;
        }
    }
а так работает норм вроде...правда код не очень смотриться
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.03.2013, 01:47     Нужно в предложении каждое слово вывести наоборот #7
Какой-то странный у вас С++, да и как оно с поставленной задачей вяжется - не понятно...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
 
void reverse_out(const std::string & s) {
    std::string t(s);
    std::reverse(t.begin(), t.end());
    std::cout << t << ' ';
}
 
int main() {
    std::string s("any many money more");
    std::cout << s << std::endl;
    std::istringstream ist(s);
    std::for_each(std::istream_iterator<std::string>(ist), std::istream_iterator<std::string>(), reverse_out);
    std::cout << std::endl;
 
    return 0;
}
http://codepad.org/Osxlkqyy
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 02:57     Нужно в предложении каждое слово вывести наоборот
Еще ссылки по теме:

Удвоить каждое слово во введённом предложении C++
В тексте удалить каждое четное слово, продублировать каждое нечетное слово C++
Вывести на печать каждое слово строки с новой строчки C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
20.03.2013, 02:57     Нужно в предложении каждое слово вывести наоборот #8
Перевернуть в строке все слова
Yandex
Объявления
20.03.2013, 02:57     Нужно в предложении каждое слово вывести наоборот
Ответ Создать тему
Опции темы

Текущее время: 07:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru