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

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

Войти
Регистрация
Восстановить пароль
 
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
#1

Создать класс String - C++

21.11.2014, 00:33. Просмотров 1000. Ответов 4
Метки нет (Все метки)

Есть такое задание.
//Создать консольное приложение, содержащее реализацию и практическое применение класса Строка. Данный класс должен быть основан на динамическом расширяемом массиве символов. Функциональность класса:
//1. Инициализация строки.
//2. Изменение строки.
//3. Возвращение строки.
//4. Получение длинны строки.
//5. Добавление строки к существующей.
//6. Вставка символа в указанную позицию строки.
//7. Вывод на экран ANSII кодов строки.
//8. Перевод символов строки в большой регистр.
//9. Перевод символов строки в маленький регистр.
Придумал решение первых 5 заданий, помогите с остальным. Вот что надумал.

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
#include <iostream>
#include <string.h>
using namespace std;
 
class String                
{
private:
    char* S;    
    int len; 
 
public:
    String();
    String(char* s); 
    String(const String& s); 
    ~String(){  delete [] S;}  
 
    const char*GetStr()const { return S;}
    const int GetLen()const { return len;}
    String operator+(const String&);
    String&operator=(const String&);
    operator char*() { return S; }
    void SetStr() 
    {
        if(S)   delete[]S;
        char a[256]; 
        cout<<"Введите строку\n";
        cin.getline(a,256); 
        len=strlen(a)+1;
        S = new char[len];
        strcpy(S,a); 
    }
    void SetStr2(char*str) 
    {
        if(S) delete[]S;
        len=strlen(str)+1;
        S = new char[len]; 
        strcpy(S, str); 
    }
};
 
String::String()
{
    S = 0;       
    len = 0;
}
 
String::String(char* s)
{
    len = strlen(s);
    S = new char[len + 1];
    strcpy(S, s);           
}
 
String::String(const String& s)
{
    len = s.len;
    S = new char[len + 1];  
    strcpy(S, s.S);
}
 
String String::operator+(const String &str)
{                        
    String s;
    s.len = len + str.len;      
    s.S = new char[s.len + 1];
    strcpy(s.S, S);          
    strcat(s.S, str.S);      
    return s;                   
}
 
String& String::operator=(const String &str)
{                       
     if(this == &str) 
        return *this;
    if(len != str.len || len == 0)
    {
        delete [] S;      
        len = str.len;        
        S = new char[len + 1];  
    }
    strcpy(S, str.S);    
    return *this;               
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 00:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать класс String (C++):

Создать класс String - C++
Здравствуйте! HELP!!! Задание:Создать класс String, реализующий работу со строчками с учетом числа обращений к ним (со...

Создать строковый шаблонный класс String - C++
Сделайте класс String шаблонным. В исходном классе замените конструктор с 1 параметром на конструктор с 2 параметрами (указатель на массив...

Как создать динамический массив типа string? Как создать класс такого массива? - C++
Как создать динамический массив типа string? Как создать класс такого массива? =-O Помогите, пожалуйста, очень нужна помощь!

Создать класс String – строку, используя динамическую память - C++
Создать класс String – строку, используя динамическую память. Определить операторы &quot;+&quot; –сложение строк, &quot;=&quot; и &quot;+=&quot; – присваивания, как...

Что нужно знать, чтобы создать класс String? - C++
Здравствуйте! Подскажите, про какие функции и разделы прочитать, чтобы сделать данное задание: &quot;Разработать класс String определив для...

Создать класс. Символьное поле должно быть задано как объект класса string - C++
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как объект класса string. Написать конструктор по умолчанию,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
21.11.2014, 10:54 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
оставшиеся задания выглядят совсем не сложными по сравнению с теми которые вы уже решили.
//6. Вставка символа в указанную позицию строки. - bool insert(char c, int pos) {if (pos > len) return false; S[pos] = c; return true;}
//7. Вывод на экран ANSII кодов строки. - я полагаю надо просто возвращать символ из указанной позиции и если это проблематично для вызывающего кода приводить код символа к int
//8. Перевод символов строки в большой регистр. - есть функция strupr но могут быть проблемы с русским
//9. Перевод символов строки в маленький регистр. - есть функция strlwr но могут быть проблемы с русским
+ учтен ли у вас вариант когда в конструктор или оператор= передают строку у которой S = 0
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
21.11.2014, 22:25  [ТС] #3
Цитата Сообщение от vxg Посмотреть сообщение
+ учтен ли у вас вариант когда в конструктор или оператор= передают строку у которой S = 0
Имеется в виду, создание строки без элементов?
Цитата Сообщение от vxg Посмотреть сообщение
//6. Вставка символа в указанную позицию строки. - bool insert(char c, int pos) {if (pos > len) return false; S[pos] = c; return true;}
при этом мы просто заменим символ, а как можно реализовать вставку с увеличением длины строки?
Просто я сомневаюсь, что корректно отработает вариант перевыделения памяти (delete[]/new[]).
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
24.11.2014, 09:28 #4
Цитата Сообщение от EfimKR Посмотреть сообщение
Имеется в виду, создание строки без элементов?
либо без элементов либо вообще передача нулевого указателя
Цитата Сообщение от EfimKR Посмотреть сообщение
сомневаюсь, что корректно отработает
почему сомневаетесь? выделяете рядом новый кусок памяти размером как было + 1, копируете в нее все до позиции, копируете символ, копируете все после позиции, удаляете исходный кусок памяти, присваиваете указателю новый кусок памяти
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
24.11.2014, 20:12  [ТС] #5
vxg, уже сделал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 20:12
Привет! Вот еще темы с ответами:

Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина? - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; //using namespace std; class string { private: int...

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ... - C++
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени, возраста и веса. Создать производный класс...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями - C++
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Реализовать пользовательские типы: класс Person и класс String - C++
1)Разработать класс Person, который содержит соответствующие члены для хранения: имени, возраста, пола и телефонного номера. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2014, 20:12
Ответ Создать тему
Опции темы

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