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

Объектно-ориентированное программирование: Разработка класса строка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вписанная окружность в треугольник http://www.cyberforum.ru/cpp-beginners/thread577584.html
Помогите пожалуйста написать на C программу которая проверяла бы окружность радиуса R в треугольник. Как я понял стороны треугольника надо задавать. Нашел формулу на википедии радиуса вписанной окр....
C++ Вопрос на экзамене.(Оператор) Какой оператор может быть визовом подпрограмми F, аргументом которой есть массив m, из 5 елементов. http://www.cyberforum.ru/cpp-beginners/thread577582.html
Разность max и min элементов последовательности и массив C++
1. Дано 100 вещественных чисел. Вычислить разность между максимальным и минимальным из них. 2. В одномерном массиве, состоящем из n вещественных элементов, вычислить: • сумму положительных...
C++ Программа считающая сумму десятичных чисел в двоичной системе(на Си)
Помогите пожалуйста(!) написать программу со счётом суммы через двоичную систему( с экрана вводят десятичные числа). Проблема в том что ни как не могу перевести числа в др. систему, и ещё не знаю...
C++ Напишите программу, которая по заданной траектории Волка определяет на сколько полных оборотов Волк замотал Зайца http://www.cyberforum.ru/cpp-beginners/thread577540.html
Заяц стоит в центре большого катка и поет свою любимую песенку в игрушечный микрофон. От микрофона тянется достаточно длинный шнур, конец которого находится в руках у Волка. Волк хочет незаметно...
C++ Выделить числа из строки и разместить в массив Само задание : Во введенной пользователем строке могут содержаться слова и целые числа, разделенные пробелами. Выделить из нее числа и разместить их в отдельный числовой массив без дублирования.... подробнее

Показать сообщение отдельно
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
17.05.2012, 17:55
если верить Страуструпу

string.h
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
41
42
43
44
45
46
47
48
49
50
#pragma once
#include "iostream"
 
class string
{
    struct srep 
    {
        char* s;       // указатель на строку
        int n;         // счетчик числа ссылок
        srep() 
        { 
            n = 1; 
        }
    };
    srep *p;
 
public:
    string(const char*);   //string x = "abc", конструктор с параметрами
    string(void);//конструктор по умолчанию
    ~string(void);//деструктор по умолчанию
    string(const string&); // string x = string ...
    string &operator= (const char*);
    string &operator= (const string&);
    char &operator[](int i);
 
    friend std::ostream& operator<< (std::ostream&, const string&);
    friend std::istream& operator>> (std::istream&, string&);
 
    friend int operator== (const string &x, const char *s)
    {
        return strcmp(x.p->s, s) == 0; 
    }
 
    friend int operator== (const string &x, const string &y)
    { 
        return strcmp(x.p->s,y.p->s) == 0; 
    }
    
    friend int operator!= (const string &x, const char *s)
    { 
        return strcmp(x.p->s,s) != 0; 
    }
 
    friend int operator!= (const string &x, const string &y)
    { 
        return strcmp(x.p->s,y.p->s) != 0; 
    }
};
 
void error(const char* p);
string.cpp

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "string.h"
#include <iostream>
 
string::string() 
{
    p = new srep;
    p->s = 0;
}
 
string::string(const string& x)
{
    x.p->n++;
    p = x.p;
}
 
string::string(const char* s)
{
    p = new srep;
    p->s = new char[strlen(s) + 1];
    strcpy(p->s, s);
}
 
string::~string()
{
    if (--p->n == 0) 
    {
        delete [] p->s;
        delete p;
    }
} 
 
std::ostream& operator<<(std::ostream& s, const string& x)
{
    return s << x.p->s;// << " [" << x.p->n << "]\n";
}
 
std::istream& operator>>(std::istream& s, string& x)
{
             char buf[256];
             s >> buf;   // ненадежно: возможно переполнение buf
                         // правильное решение см. в $$10.3.1
             x = buf;
             //cout << "echo: " << x << '\n';
             return s;
}
 
string& string::operator=(const char* s)
{
    if (p->n > 1) 
    {  // отсоединяемся от старой строки
        p->n--;
        p = new srep;
    }
    else    // освобождаем строку со старым значением
    {
        delete [] p->s;
    }
 
    p->s = new char[ strlen(s)+1 ];
    strcpy(p->s, s);
    return *this;
}
 
string& string::operator=(const string& x)
{
    x.p->n++;  // защита от случая ``st = st''
    if (--p->n == 0) 
    {
        delete[] p->s;
        delete p;
    }
    p = x.p;
    return *this;
}
 
void error(const char* p)
{
    std::cerr << p << '\n';
    exit(1);
}
 
char& string::operator[](int i)
{
    if (i < 0 || strlen(p->s) < i)
    {
        error("недопустимое значение индекса");
    }
        return p->s[i];
}
main.cpp
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
#include "iostream"
#include "string.h"
 
 
int main()
{   
    setlocale(0,"");
    string x[100];
    int n;
 
    std::cout << " здесь начало \n";
 
    for ( n = 0; std::cin >> x[n]; n++) 
    {
        if (n == 100)
        {
            error("слишком много слов");
            return 99;
        }
        string y;
        std::cout << (y = x[n]);
        if (y == "done") break;
    }
    std::cout << "теперь мы идем по словам в обратном порядке \n";
    for (int i = n - 1; 0 <= i; i--)
    {
        std::cout << x[i];
    }
    return 0;
 
    system("pause >> null");
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru