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

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

Войти
Регистрация
Восстановить пароль
 
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
#1

класс String - C++

16.07.2013, 16:06. Просмотров 448. Ответов 1
Метки нет (Все метки)

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
//main
#include <iostream>
#include "header.h" 
const int ArSize = 10;
const int MaxLen =81;
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    String name;
    cout <<"Hi, what's your name?\n>> ";
    cin >> name;
    cout << name << ", please enter up to " << ArSize
        << " short sayings <empty line to quit>:\n";
    String sayings[ArSize];     
    char temp[MaxLen];          
    int i;
    for (i = 0; i < ArSize; i++)
    {
        cout << i+1 << ": ";
        cin.get(temp, MaxLen);
        while (cin && cin.get() != '\n')
            continue;
        if (!cin || temp[0] == '\0')    
            break;              
        else
            sayings[i] = temp;  
    }
    int total = i;              
 
    if ( total > 0)
    {
        cout << "Here are your sayings:\n";
        for (i = 0; i < total; i++)
            cout << sayings[i][0] << ": " << sayings[i] << endl;
 
        int shortest = 0;
        int first = 0;
        for (i = 1; i < total; i++)
        {
            if (sayings[i].length() < sayings[shortest].length())
                shortest = i;
            if (sayings[i] < sayings[first])
                first = i;
        }
        cout << "Shortest saying:\n" << sayings[shortest] << endl;;
        cout << "First alphabetically:\n" << sayings[first] << endl;
        String me;
        me= sayings[0]+"mi";
        cout << "sayings1+mi: " <<me<< endl;
        cout << "This program used "<< String::HowMany() 
            << " String objects. Bye.\n";
    }
    else
        cout << "No input! Bye.\n";
    system("PAUSE");
    return 0; 
}
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
//header
#ifndef STRING1_H_
#define STRING1_H_
#include <iostream>
using std::ostream;
using std::istream;
 
class String
{
private:
    char * str;             
    int len;                
    static int num_strings; 
    static const int CINLIM = 80;  
public:
    String(const char * s); 
    String();               
    String(const String &); 
    ~String();              
    int length () const { return len; }
    String & operator=(const String &);
    String & operator=(const char *);
    char & operator[](int i);
    const char & operator[](int i) const;
    friend bool operator<(const String &st, const String &st2);
    friend bool operator>(const String &st1, const String &st2);
    friend bool operator==(const String &st, const String &st2);
    friend String & operator+(const String &st1,const char * s);
    friend ostream & operator<<(ostream & os, const String & st);
    friend istream & operator>>(istream & is, String & st);
    static int HowMany();
};
#endif
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
90
91
92
93
94
95
96
97
98
99
100
101
102
//method
#include <cstring>                 
#include "header.h"                
using std::cin;
using std::cout;
 
int String::num_strings = 0;
int String::HowMany()
{
    return num_strings;
}
String::String(const char * s) 
{
    len = std::strlen(s);      
    str = new char[len + 1];   
    std::strcpy(str, s);       
    num_strings++;             
}
 
String::String()               
{
    len = 4;
    str = new char[1];
    str[0] = '\0';             
    num_strings++;
}
 
String::String(const String & st)
{
    num_strings++;             
    len = st.len;              
    str = new char [len + 1];  
    std::strcpy(str, st.str);  
}
String::~String()              
{
    --num_strings;             
    delete [] str;             
}
String & String::operator=(const String & st)
{
    if (this == &st)
        return *this;
    delete [] str;
    len = st.len;
    str = new char[len + 1];
    std::strcpy(str, st.str);
    return *this;
}
String & String::operator=(const char * s)
{
    delete [] str;
    len = std::strlen(s);
    str = new char[len + 1];
    std::strcpy(str, s);
    return *this;
}
char & String::operator[](int i)
{
    return str[i];
}
const char & String::operator[](int i) const
{
    return str[i];
}
bool operator<(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) < 0);
}
bool operator>(const String &st1, const String &st2)
{
    return st2 < st1;
}
bool operator==(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) == 0);
}
ostream & operator<<(ostream & os, const String & st)
{
    os << st.str;
    return os; 
}
istream & operator>>(istream & is, String & st)
{
    char temp[String::CINLIM];
    is.get(temp, String::CINLIM);
    if (is)
        st = temp;
    while (is && is.get() != '\n')
        continue;
    return is; 
}
String & operator+(const String &st1,const char * s)
{
    String set;
    delete [] set.str;
    set.len=std::strlen(s)+st1.len+1;
    set.str=new char[set.len];
    std::strcpy(set.str,st1.str);
    std::strcat(set.str,s);
    return set;
}
Помогите, совершил где-то между 93-102 глупую ошибку, вылезает std::bad_alloc.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос класс String (C++):

Здравствуйте! Создал класс 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...

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

Класс String - C++
добрый день. У кого-то есть программа которая создаёт класс String – строку, используя динамическую память. Определить операторы &quot;+&quot;...

Класс String - C++
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.( Visual C++)

Класс string - C++
Добрый день, друзья. #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main (void) { string obj = &quot;one...

Класс <string> - C++
Подскажите пожалуста, как переписать из строки str первые n байтов в строку str1, а остальные в строку str2?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13209 / 7480 / 841
Регистрация: 27.09.2012
Сообщений: 18,389
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 16:13 #2
Цитата Сообщение от underwaterspace Посмотреть сообщение
Помогите, совершил где-то между 93-102 глупую ошибку, вылезает std::bad_alloc.
Возвращаете ссылку на временную переменную.
Сделайте так:
C++
1
2
3
String operator+(const String &st1,const char * s){
//...
}
ну и прототип поменяйте тоже
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 16:13
Привет! Вот еще темы с ответами:

Класс String - C++
Всем привет, помогите пожалуйста. Ошибка на этапе выполнения. Скомпилируйте программу, с помощью стрелочек(клавиш) перейдите на 2 пункт...

Класс String - C++
вот файл реализации String::String() //конструктор на 80 { size = 80; str = new char; for (int i = 0;i &lt; size;i++) ...

класс string - C++
товарищи,пишу лабу,простенькую,в принципе,но почему-то фэйлюсь. в ведённой строке за один просмотр найти все слова,состоящие только из...

Разработать класс String - C++
Разработка класса строка Задание Разработать класс String определив для него методы: • копирования строк, реализовав оператор = ; ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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