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

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

Восстановить пароль Регистрация
 
cxemuch205
 Аватар для cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:12     Дописать программу #1
Нужно слова в строке переставить с конца в начале
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
 Аватар для 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
 Аватар для 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
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 19:31     Дописать программу #4
cxemuch205, например строка "привет пока" должна превратиться в "пока привет"?
cxemuch205
 Аватар для cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:34  [ТС]     Дописать программу #5
Цитата Сообщение от cxemuch205 Посмотреть сообщение
Сейчас проверю.. Спасибо за попытку!
Нет не работает..

Добавлено через 2 минуты
Цитата Сообщение от cxemuch205 Посмотреть сообщение
Нет не работает..
Там плюс нужен, если его убрать ничего толкового не выводит, а так выводит только последнее слово
cxemuch205
 Аватар для cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 19:35  [ТС]     Дописать программу #6
Цитата Сообщение от yoghurt92 Посмотреть сообщение
cxemuch205, например строка "привет пока" должна превратиться в "пока привет"?
да именно
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 19:38     Дописать программу #7
cxemuch205, а не вариант взять другую строку, записывать туда в нужном порядке, и потом скопировать все в исходную, или принципиально?
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
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 19:57     Дописать программу #9
cxemuch205, ну если она выводит одно слово, значит она работает НЕправильно) так чем вам мой вариант не нравится?)
cxemuch205
 Аватар для cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 20:03  [ТС]     Дописать программу #10
yoghurt92, меньше текста, больше дела, подкинте идею что там не так..
yoghurt92
373 / 344 / 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
 Аватар для 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
373 / 344 / 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
 Аватар для cxemuch205
1 / 1 / 1
Регистрация: 31.10.2012
Сообщений: 46
05.03.2013, 21:07  [ТС]     Дописать программу #14
yoghurt92, работает спасибо!
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.03.2013, 21:09     Дописать программу #15
cxemuch205, вы поняли в чем была ошибка?

Добавлено через 28 секунд
cxemuch205, поставить спасибо
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
373 / 344 / 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
 Аватар для 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     Дописать программу
Ответ Создать тему
Опции темы

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