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

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

Восстановить пароль Регистрация
 
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
21.11.2014, 00:33     Создать класс String #1
Есть такое задание.
//Создать консольное приложение, содержащее реализацию и практическое применение класса Строка. Данный класс должен быть основан на динамическом расширяемом массиве символов. Функциональность класса:
//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++ Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина?
C++ Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Создать класс. Символьное поле должно быть задано как объект класса string C++
C++ Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
Что нужно знать, чтобы создать класс String? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,279
21.11.2014, 10:54     Создать класс String #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
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
21.11.2014, 22:25  [ТС]     Создать класс String #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
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,279
24.11.2014, 09:28     Создать класс String #4
Цитата Сообщение от EfimKR Посмотреть сообщение
Имеется в виду, создание строки без элементов?
либо без элементов либо вообще передача нулевого указателя
Цитата Сообщение от EfimKR Посмотреть сообщение
сомневаюсь, что корректно отработает
почему сомневаетесь? выделяете рядом новый кусок памяти размером как было + 1, копируете в нее все до позиции, копируете символ, копируете все после позиции, удаляете исходный кусок памяти, присваиваете указателю новый кусок памяти
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
24.11.2014, 20:12  [ТС]     Создать класс String #5
vxg, уже сделал.
Yandex
Объявления
24.11.2014, 20:12     Создать класс String
Ответ Создать тему
Опции темы

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