Поменять первые слова строки

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
drweb1807
Сообщения: 2
Зарегистрирован: 02 дек 2015, 17:29

Функцию вывода содержимого объекта реализовать как внешнюю по отношению к классу
Задача 1 . Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы в обоих объектах поменять первые слова строки. Содержимое объектов (их строки) до и после обмена вывести на экран.
Кто сможет чем помочь. Буду признателен.
Я так понимаю в обоих объектах нужно заменить первые слова другими словами строк.
Программу реализовать на C++
Аватара пользователя
Din666
Сообщения: 52
Зарегистрирован: 17 июл 2015, 13:25
Откуда: Moscow
Контактная информация:

это ты сам такое ТЗ придумал )))) ?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Din666, походу да :)

drweb1807, а в чём именно проблема? Судя по описанию, в классе должен быть метод, получающий не константную ссылку на объект этого же класса.

Код: Выделить всё

#include <iostream>
#include <string>

class CStringHolder
{
public:
   CStringHolder(const std::string& str) : m_str(str)
   {
   }

   void SwapFirstWords(CStringHolder& anotherHolder)
   {
      // Code here to swap first words between m_str and anotherHolder.m_str
   }

   void Show() const
   {
      std::cout << m_str << std::endl;
   }

private:
   std::string m_str;
};

int main()
{
   CStringHolder str1("Hello String Holder");
   CStringHolder str2("Goodby");

   str1.Show();
   str2.Show();

   str1.SwapFirstWords(str2);

   str1.Show();
   str2.Show();

   return 0;
}
Имплементацию метода SwapFirstWords оставляю тебе в качестве самостоятельной работы :)

P.S. В коде могут быть неточности, так как писал прямо сюда и компилировать не пробовал.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Din666
Сообщения: 52
Зарегистрирован: 17 июл 2015, 13:25
Откуда: Moscow
Контактная информация:

Функцию вывода содержимого объекта реализовать как внешнюю по отношению к классу.

Код: Выделить всё

....................
    public:
...................
        const std::string & getStr() const {return m_str;}
    private:
...................
};

static void Show(const CStringHolder & holder) { std::cout << holder.getStr() << std::endl;}
int main() {
...........
Show(str1);
Show(str2);
................
................
Возможно это имелось ввиду
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Я что-то пропустил про внешнюю функцию вывода. Тогда будет удобнее даже вот так (хоть это и не функция, а оператор):

Код: Выделить всё

class CStringHolder
{
friend std: :o stream& operator<<(std: :o stream& os, const CStringHolder& holder);
...
};

std: :o stream& operator<<(std: :o stream& os, const CStringHolder& holder)
{
    os << holder.m_str;
    return os;
}

int main()
{
   ...
   std::cout << str1 << std::endl;
   std::cout << str2 << std::endl;
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Din666
Сообщения: 52
Зарегистрирован: 17 июл 2015, 13:25
Откуда: Moscow
Контактная информация:

да так очень красиво, но боюсь что будет сразу видно, что Студент не сам делал )))
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Пропал наш студен. Испугался умных слов.

А может просто запостил на десяток форумов эту задачу, и на одном из форумов ему уже решили её, и сюда он больше никогда в жизни не заглянет. Такое я тоже встречал.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Din666
Сообщения: 52
Зарегистрирован: 17 июл 2015, 13:25
Откуда: Moscow
Контактная информация:

Логично, но все равно хорошо что есть решение, может еще кому пригодится.
Ответить