Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2012, 20:51   #1
ROBODEF
Новичок
Джуниор
 
Регистрация: 20.12.2012
Сообщений: 1
Сообщение Расположить слова строки в порядке, обратном исходному.

Расположить слова строки в порядке, обратном исходному.
Помогите пожалуйста.
ROBODEF вне форума Ответить с цитированием
Старый 21.12.2012, 14:04   #2
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Код:
char *str = "programmers forum";
char *str2 = new char[strlen(str)+1];
int k=strlen(str)+1, i2=0;
for(int i=strlen(str)+1; i>0; i--)
    if(str[i]==' ')
    {
        for(int j=i; j<k; j++)
            str[i2++] = str[j];
        k=i;
    }

Последний раз редактировалось Blind Guard; 21.12.2012 в 15:04.
Blind Guard вне форума Ответить с цитированием
Старый 21.12.2012, 14:56   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

strlen возвращает длину в символах:
Цитата:
Return Value
Each of these functions returns the number of characters in str, excluding the terminal NULL.
Т.е. str2 уже зарезервировало памяти на один символ меньше.

А еще нет проверки, что дошли до начала исходной строки, но надо ж сохранить слово и от начала до первого пробела.

оператор "=" возвращает результат присваивания, т.е. будет true в любом случае, кроме присваивания нуля.

Бестолковые имена переменных. Вы уже в двух переменных запутались, а если их будет 100? Когда каждая строка означает что-то свое, но все названы "str" + "набор цифр"?

UPD: Хитрец, хитрец Blind Guard))) Не сразу до меня дошло) Специально так накосячил? Ведь тут применены все классические ошибки и без радикальной ревизии этот код бесполезен. Т.е. тупым копипастом не обойтись.

Последний раз редактировалось Smogg; 21.12.2012 в 15:02.
Smogg вне форума Ответить с цитированием
Старый 21.12.2012, 15:09   #4
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Smogg, спасибо за некоторые замечания, исправил всё, что на самом деле считал нужным.
Я умею принимать критику, но в последнем предложении вы не правы.
Где я запутался с двумя переменными? Мб это вы запутались в моём коде? (хоть это и нереально )
Виной глупым ошибкам стало то, что многие эти моменты я давно не применял.
Ну и я не ставил себе цель написать идеальный код, я дал идею чтоли.
Кому надо, тот поймёт и подправит.
Blind Guard вне форума Ответить с цитированием
Старый 21.12.2012, 15:44   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

ROBODEF

Код:
#include <string>
#include <list>
#include <sstream>
#include <iostream>
#include <locale>

int main()
{
    std::locale::global(std::locale(""));
    std::string w, text = "Расположить слова строки в порядке обратном исходному";
    std::istringstream ss(text);
    std::list<std::string> words;
    while (ss >> w)
        words.push_front(w);
    for (auto it : words)
        std::cout << it << " ";
}
пример работы: http://liveworkspace.org/code/37PEmN$3
Rififi вне форума Ответить с цитированием
Старый 21.12.2012, 17:07   #6
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Blind Guard Посмотреть сообщение
Где я запутался с двумя переменными? Мб это вы запутались в моём коде? (хоть это и нереально )
Это кажется, что нереально заблудится в трех соснах))
Цитата:
for(int j=i; j<k; j++)
str[i2++] = str[j];
Где ошибка?
Smogg вне форума Ответить с цитированием
Старый 22.12.2012, 20:36   #7
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
Где ошибка?
Хоть убейте не вижу ошибки.
Blind Guard вне форума Ответить с цитированием
Старый 22.12.2012, 21:34   #8
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Ок, тогда вам дается два варианта:
1. Начинать копать могилу
2. Подтвердить свою правоту. Т.е. довести до компилябельного состояния свою идею по перетусовке слов в исходной строке согласно заданию, но с добровольно принятым ограничением: использовать только один char'овый буфер величиной в один символ. Причем этот буфер даже не отдельной переменной, а под него отводится та ячейка памяти из массива исходной строки, в которую записан терминирующий нуль.
А если вы истинный джедай хардкора, то сумеете обойтись всего тремя уже объявленными счетчиками, т.е. k, i, i2;

//Вот такой вот простенький тест на MemoryOptimizationSkill )))
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы массива X расположить в обратном порядке ( Delphi ) alex150394 Помощь студентам 5 19.12.2012 10:19
Строки - Расположить все буквы данного слова в алфавитном порядке Александра Раш Паскаль, Turbo Pascal, PascalABC.NET 6 01.05.2012 22:22
Переставить слова в предложении в обратном порядке TLiX Помощь студентам 1 31.03.2012 19:57
С .в матрице, строку где все числа четные, расположить в обратном порядке. daimonTM Помощь студентам 1 22.12.2010 10:02
Как расположить в алфавитном порядке слова,содержащиеся в файле? JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 0 20.12.2008 13:58