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

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

Войти
Регистрация
Восстановить пароль
 
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
#1

Дописать программу - C++

05.03.2013, 19:12. Просмотров 498. Ответов 18
Метки нет (Все метки)

Нужно слова в строке переставить с конца в начале
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 <string.h>
#include <stdio.h>
#include <conio.h>
#define N 600
 
char buf[N];
 
int main()
{
    char input[N]; int i=0, n=0, k=0, p=0;
    printf("Enter your text: ");
    gets(input);   //Ввели строку
    k = strlen(input); //к-во элм.
    input[k+1]=' '; //добавили в конец пробел
    for(i=k; i!=0; i--)
    {
        if(input[i]==' ') // ищем с конца пробел
        {
            for(n=i+1; input[n]!=' '; n++) // к концу до пробела слово вставляем в буфер(начало)
            {
                buf[p]=input[n];
                p++;
            }
            buf[p+1]=' '; // добавляем в буфер пробел для разделения
        }
    }
    puts(buf); //выводим буфер
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mysterion777
-74 / 48 / 2
Регистрация: 11.01.2013
Сообщений: 199
05.03.2013, 19:23     Дописать программу #2
я заметил что ты не правильно обращаешься к концу строки так как у тебя счет символов идет с нуля а длина строки считается с 1-цы то....
C++
1
2
3
gets(input);   //Ввели строку
    k = strlen(input); //к-во элм.
    input[k+1]=' '; //добавили в конец пробел
не верен нуно так
C++
1
2
3
gets(input);   //Ввели строку
    k = strlen(input); //к-во элм.
    input[k]=' '; //добавили в конец пробел
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:25  [ТС]     Дописать программу #3
Цитата Сообщение от Mysterion777 Посмотреть сообщение
я заметил что ты не правильно обращаешься к концу строки так как у тебя счет символов идет с нуля а длина строки считается с 1-цы то....
C++
1
2
3
gets(input);   //Ввели строку
    k = strlen(input); //к-во элм.
    input[k+1]=' '; //добавили в конец пробел
не верен нуно так
C++
1
2
3
gets(input);   //Ввели строку
    k = strlen(input); //к-во элм.
    input[k]=' '; //добавили в конец пробел
Сейчас проверю.. Спасибо за попытку!
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 19:31     Дописать программу #4
cxemuch205, например строка "привет пока" должна превратиться в "пока привет"?
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:34  [ТС]     Дописать программу #5
Цитата Сообщение от cxemuch205 Посмотреть сообщение
Сейчас проверю.. Спасибо за попытку!
Нет не работает..

Добавлено через 2 минуты
Цитата Сообщение от cxemuch205 Посмотреть сообщение
Нет не работает..
Там плюс нужен, если его убрать ничего толкового не выводит, а так выводит только последнее слово
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:35  [ТС]     Дописать программу #6
Цитата Сообщение от yoghurt92 Посмотреть сообщение
cxemuch205, например строка "привет пока" должна превратиться в "пока привет"?
да именно
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 19:38     Дописать программу #7
cxemuch205, а не вариант взять другую строку, записывать туда в нужном порядке, и потом скопировать все в исходную, или принципиально?
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:53  [ТС]     Дописать программу #8
Цитата Сообщение от yoghurt92 Посмотреть сообщение
cxemuch205, а не вариант взять другую строку, записывать туда в нужном порядке, и потом скопировать все в исходную, или принципиально?
Хах)) да люблю когда пишешь и программа работает))

Добавлено через 12 минут
Этот вариант работате но только последнее слово выводит
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 <string.h>
#include <stdio.h>
#include <conio.h>
#define N 100
 
char buf[N];
 
int main()
{
    char input[N]; int i=0, n=0, k=0, p=0;
    printf("Enter your text: ");
    gets(input);
    k = strlen(input);
    input[k+1]=' ';
    for(i=k; i!=0; i--)
    {
        if(input[i]==' ')
        {
            for(n=i+1; input[n]!=' '; n++)
            {
                buf[p]=input[n];
                p++;
            }
            buf[p+1]=' ';
            p++;
        }
    }
    puts(buf);
    getch();
}
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 19:57     Дописать программу #9
cxemuch205, ну если она выводит одно слово, значит она работает НЕправильно) так чем вам мой вариант не нравится?)
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 20:03  [ТС]     Дописать программу #10
yoghurt92, меньше текста, больше дела, подкинте идею что там не так..
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 20:27     Дописать программу #11
cxemuch205, зачем вы в конец строки добавляете пробел? может лучше сделать так:

C++
1
for(n=i+1; input[n]!='\0' || input[n]!=' '; n++)
тогда цикл будет идти либо до конца строки конда записываем последние слово, либо до пробела...

Добавлено через 11 минут
cxemuch205, твоя программа работает правильно, просто ты не совсем правильно условия сделал, не надо в конец строки ставить пробел, ты идешь с конца строки, находишь пробел и копируешь все в переменную, ок, первое слово у тебя есть, ты ставишь пробел и казалось все круто, НО!!!! ты идешь дальше проходишь первое слов, а перед первым словом ожидаемого пробела нет, вот и программа завершает свою работу, все работает правильно, просто условие надо поменять!

покажу, смотри, есть строка one two, ты идешь до пробела перед two и все копируешь в буфер, ок, а перед one пробела нет, тут твое условие и не работает...
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 20:37  [ТС]     Дописать программу #12
Цитата Сообщение от yoghurt92 Посмотреть сообщение
cxemuch205, зачем вы в конец строки добавляете пробел? может лучше сделать так:

C++
1
for(n=i+1; input[n]!='\0' || input[n]!=' '; n++)
тогда цикл будет идти либо до конца строки конда записываем последние слово, либо до пробела...

Добавлено через 11 минут
cxemuch205, твоя программа работает правильно, просто ты не совсем правильно условия сделал, не надо в конец строки ставить пробел, ты идешь с конца строки, находишь пробел и копируешь все в переменную, ок, первое слово у тебя есть, ты ставишь пробел и казалось все круто, НО!!!! ты идешь дальше проходишь первое слов, а перед первым словом ожидаемого пробела нет, вот и программа завершает свою работу, все работает правильно, просто условие надо поменять!

покажу, смотри, есть строка one two, ты идешь до пробела перед two и все копируешь в буфер, ок, а перед one пробела нет, тут твое условие и не работает...
Я так пробовал, но все равно попробовал еще раз, не работает..
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 21:02     Дописать программу #13
cxemuch205, вот посмотрите, вводил one two выдавало правильный ответ, своего не добавлял, оставил ваш код

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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
#define N 100
 
char buf[N];
 
int main()
{
    char input[N]; int i=0, n=0, k=0, p=0;
    printf("Enter your text: ");
    gets(input);   //Ввели строку
    k = strlen(input); //к-во элм.
 
    for(i=k; i>=0; i--)
    {
        if(input[i]==' ' || i ==0) // ищем с конца пробел
        {
            if(i ==0)
                i -= 1;
 
            for(n=i+1; input[n]!='\0' && input[n]!=' '; n++) // к концу до пробела слово вставляем в буфер(начало)
            {
                buf[p]=input[n];
                p++;
            }
             
            buf[p] = ' '; // добавляем в буфер пробел для разделения
            p++;
        }
    }
    puts(buf); //выводим буфер
    getch();
}
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 21:07  [ТС]     Дописать программу #14
yoghurt92, работает спасибо!
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 21:09     Дописать программу #15
cxemuch205, вы поняли в чем была ошибка?

Добавлено через 28 секунд
cxemuch205, поставить спасибо
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 21:11  [ТС]     Дописать программу #16
Если честно не очень, программа как то выглядит не очень объясните.. Я не очень пойму строку
C++
1
2
3
4
if(input[i]==' ' || i ==0) // ищем с конца пробел
        {
            if(i ==0)
                i -= 1;
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 21:16     Дописать программу #17
cxemuch205, смотрите, когда у нас после слова есть пробел или признак конца строки(это выше в условии '\0'), то все будет хорошо работать, а теперь мы подходим к началу строки, на за начало мы выйти не можем, да и пробела у нас нет ((что тут?)one(пробел)two'\0') так вот, когда мы доходим до начала строки i = 0, но так как в цикле ниже n = i + 1, то нам нужно сделать i = -1, чтобы первое слово записалось с первой буквы, иначе мы получим следующий результат: two...
cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 21:49  [ТС]     Дописать программу #18
yoghurt92, я понял, спасибо, я просто не доконца продумывал условие.. Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 21:57     Дописать программу
Еще ссылки по теме:

как дописать программу C++
Помогите дописать программу C++
Дописать структурную программу по C++ C++
C++ Как дописать программу

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

Или воспользуйтесь поиском по форуму:
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
05.03.2013, 21:57     Дописать программу #19
может пригодится.. вариант без дополнительной памяти. переворот всей строки, затем переворот каждой лексемы.
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
void swap(char *str, int i, int j)
{
    int ch; 
    while (i < j)
    {
        ch = str[i];
        str[i] = str[j];
        str[j] = ch;
        ++i; --j;
    }
}
 
int main(void)
{
    char str[512];
    int i, k;
    fgets(str, sizeof(str)/sizeof(*str), stdin);  
    swap(str, 0, strlen(str)-1);
    for (i = 1, k = 0; i < strlen(str); ++i)
    {
        if (!isalnum(str[i]))
        {
            swap(str, k, i-1);
            k = i;
        }
        else if (!isalnum(str[k]))
            k = i;
    }
    swap(str, k, i-1);
    printf("%s", str);
    return 0;
}
Yandex
Объявления
05.03.2013, 21:57     Дописать программу
Ответ Создать тему
Опции темы

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