Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/103: Рейтинг темы: голосов - 103, средняя оценка - 4.99
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
1

Создать класс String

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

Author24 — интернет-сервис помощи студентам
Есть такое задание.
//Создать консольное приложение, содержащее реализацию и практическое применение класса Строка. Данный класс должен быть основан на динамическом расширяемом массиве символов. Функциональность класса:
//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;               
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2014, 00:33
Ответы с готовыми решениями:

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

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

Как создать динамический массив типа string? Как создать класс такого массива?
Как создать динамический массив типа string? Как создать класс такого массива? =-O Помогите,...

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

4
Модератор
3387 / 2159 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
21.11.2014, 10:54 2
Лучший ответ Сообщение было отмечено EfimKR как решение

Решение

оставшиеся задания выглядят совсем не сложными по сравнению с теми которые вы уже решили.
//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
1
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 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[]).
0
Модератор
3387 / 2159 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
24.11.2014, 09:28 4
Цитата Сообщение от EfimKR Посмотреть сообщение
Имеется в виду, создание строки без элементов?
либо без элементов либо вообще передача нулевого указателя
Цитата Сообщение от EfimKR Посмотреть сообщение
сомневаюсь, что корректно отработает
почему сомневаетесь? выделяете рядом новый кусок памяти размером как было + 1, копируете в нее все до позиции, копируете символ, копируете все после позиции, удаляете исходный кусок памяти, присваиваете указателю новый кусок памяти
1
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
24.11.2014, 20:12  [ТС] 5
vxg, уже сделал.
1
24.11.2014, 20:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 20:12
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru