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

Преобразование int и char в строку - C++

Восстановить пароль Регистрация
 
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 04:19     Преобразование int и char в строку #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
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream.h>
#include <istream.h> //dlya cin.getline()
#include <string.h>
#include <conio.h>
#include <fstream.h>
#include <stdlib.h>
 
///////////////////////////////////////
const int MAX=255;
 
class String
{
    private:
        char *str;
        char *strend;
    public:
///////////////////////////////////////////////////
    String()
        {
            str = new char [MAX];
            str[0]='\0';
            strend = new char [MAX];
            strend[0]='\0';
            //cout << "Constructor!";
        }
//-------------------------------------
    String& operator= (String&ss)//s2=s1
        {
            strcpy(strend, ss.str);
            return *this;
        }
//-------------------------------------
    ~String()
        {
            delete []str;
            delete []strend;
            //cout << "Destructor!";
        }
//////////////////////////////////////////////////
    String(int x)
    {
        char *p="";
        itoa(x,p,2);
        strcpy(str,p);
    }
 
//--------------------------------------------
    String(char x[])
    {
        strcpy(str,x);
    }
//--------------------------------------------
    String operator+ (String &obj)
    {
        String pobj;
        strcat(pobj.str,this->str);
        strcat(pobj.str,obj.str);
        return pobj;
    }
};
//////////////////////////////////////////////////
void main(void)
{
    String s1='a';
    String s2=12;
    String s3=s1+s2;
 
    cout << "\n" << endl;
 
    getch();
}
В чем собственно ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.11.2012, 04:23     Преобразование int и char в строку #2
C++
1
2
3
4
5
6
    String(int x)
    {
        char *p="";
        itoa(x,p,2);
        strcpy(str,p);
    }
p указывает на константный литерал. Выделите память динамически.
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 04:34  [ТС]     Преобразование int и char в строку #3
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
    String(int x)
    {
        char *p="";
        itoa(x,p,2);
        strcpy(str,p);
    }
p указывает на константный литерал. Выделите память динамически.
Замена на ... не помогает.
C++
1
2
3
4
5
6
7
    String(int x)
    {
        char *p=new char[3];
                //char *p=new char[3];
        itoa(x,p,2);
        strcpy(str,p);
    }
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.11.2012, 04:37     Преобразование int и char в строку #4
Это же конструктор. Где выделение памяти под str? При strcpy str у Вас указывает черть его знает куда.
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 04:49  [ТС]     Преобразование int и char в строку #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Это же конструктор. Где выделение памяти под str? При strcpy str у Вас указывает черть его знает куда.
Что-то я не совсем понимаю.
Код должен быть
C++
1
2
3
4
5
6
7
8
9
10
11
String(int x)
    {
        char *p;
        p = new char [MAX];
        p[0]='\0';
                str = new char [MAX];
        str[0]='\0';
        itoa(x,p,2);
        strcpy(str,p);
        delete []p;
    }
Но при нем выдает ошибку.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.11.2012, 06:15     Преобразование int и char в строку #6
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
#include <iostream>
#include <string.h>
#include <conio.h>
#include <fstream>
#include <stdlib.h>
 using namespace std;
///////////////////////////////////////
const int MAX=255;
 
class String
{
    private:
        char *str;
        char *strend;
          void InitializePointers(){
               str = new char [MAX];
            str[0]='\0';
            strend = new char [MAX];
            strend[0]='\0';
          }
    public:
///////////////////////////////////////////////////
    String()
        {
            this->InitializePointers();
            //cout << "Constructor!";
        }
     String(String &rv){//Конструктор копирования
         this->InitializePointers();
         strcpy(this->str,rv.str);
         strcpy(this->strend,rv.strend);
     }
//-------------------------------------
    String& operator= (String&ss)//s2=s1
        {
            strcpy(strend, ss.str);
            return *this;
        }
//-------------------------------------
    ~String()
        {
            delete []str;
            delete []strend;
            //cout << "Destructor!";
        }
//////////////////////////////////////////////////
    String(int x)
    {
         this->InitializePointers();
        char *p=new char[10];//Выделил память
        itoa(x,p,2);
        strcpy(str,p);
          delete [] p;//Освободил память
    }
 
//--------------------------------------------
    String(char x[])
    {
         this->InitializePointers();
        strcpy(str,x);
    }
//--------------------------------------------
    String operator+ (String &obj)
    {
        char temp[MAX];
        strcpy(temp,str);
        strcat(temp,obj.str);
        return (temp);
    }
};
 
//////////////////////////////////////////////////
void main(void)
{
    {
    String s1="fff";
    String s2=12;
    String s3=s1+s2; 
    cout << "\n" << endl; 
    }
    getch();
}
Так, вроде, работает, но я бы переписал весь код.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 17:25     Преобразование int и char в строку
Еще ссылки по теме:

Преобразование 2-х char в один short int C++
C++ Преобразование Int в char
C++ Преобразование int char и обратно

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

Или воспользуйтесь поиском по форуму:
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 17:25  [ТС]     Преобразование int и char в строку #7
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
#include <iostream.h>
#include <istream.h> //dlya cin.getline()
#include <string.h>
#include <conio.h>
#include <fstream.h>
#include <stdlib.h>
 
///////////////////////////////////////
const int MAX=255;
 
class String
{
    private:
        char *str;
    public:
///////////////////////////////////////////////////
    String()
        {
            str = new char [MAX];
            str[0]='\0';
            //cout << "Constructor!";
        }
//-------------------------------------
    String &operator= (String&obj)//s2=s1
        {
            //strcpy(strend, obj.str);
            strcpy(str, obj.str);
            return *this;
        }
//-------------------------------------
    ~String()
        {
            delete []str;
            //cout << "Destructor!";
        }
//////////////////////////////////////////////////
    String(int x)
    {
        str = new char [MAX];
        str[0]='\0';
        char *p=new char[MAX];
        itoa(x,p,2);
        strcpy(str,p);
        delete [] p;
    }
//--------------------------------------------
    String(char x[])
    {
        str = new char [MAX];
        str[0]='\0';
        strcpy(str,x);
    }
//--------------------------------------------
    String(String &obj)
    {
        str = new char [MAX];
        str[0]='\0';
        strcpy(str,obj.str);
    }
//--------------------------------------------
    String operator+ (String &obj)
    {
        char pobj[MAX];
        strcpy(pobj,str);
        strcat(pobj,obj.str);
        return pobj;
    }
 
    void view()
    {
        cout << str << endl;
    }
};
//////////////////////////////////////////////////
void main(void)
{
    String s1='a';
    String s2=12;
    String s3=s1+s2;
 
    s3.view();
 
    cout << "\n" << endl;
 
    getch();
}
Изменил как мне нужно и все-таки выводит в двоичной системе, но уже работает.

Добавлено через 4 часа 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
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
#include <iostream.h>
#include <istream.h> //dlya cin.getline()
#include <string.h>
#include <conio.h>
#include <fstream.h>
#include <stdlib.h>
 
///////////////////////////////////////
const int MAX=255;
 
class String
{
    private:
        char *str;
    public:
///////////////////////////////////////////////////
    String()
        {
            str = new char [MAX];
            str[0]='\0';
            //cout << "Constructor!";
        }
//-------------------------------------
    String &operator= (String&obj)//s2=s1
        {
       //strcpy(strend, obj.str);
            strcpy(str, obj.str);
            return *this;
        }
//-------------------------------------
    ~String()
        {
            delete []str;
            //cout << "Destructor!";
        }
//////////////////////////////////////////////////
    String(int x)
    {
        str = new char [MAX];
        str[0]='\0';
        char *p=new char[MAX];
        itoa(x,p,10);
        strcpy(str,p);
    delete [] p;
    }
//--------------------------------------------
    String(char x)
    {
        str = new char [MAX];
        str[0]='\0';
        char* temp;
        temp = new char [MAX];
        temp[0]='\0';
        temp[0]=x;
        temp[1]='\0';
        strcpy(str,temp);
        delete []temp;
    }
//--------------------------------------------
     String(String &obj)
    {
        str = new char [MAX];
        str[0]='\0';
        strcpy(str,obj.st,mbfdwr);
    }
//--------------------------------------------
    String operator+ (String &obj)
    {
        String pobj;
        strcat(pobj.str,this->str);
        strcat(pobj.str,obj.str);
        return pobj;
    }
 
    void view()
    {
        cout << str << endl;
    }
};
//////////////////////////////////////////////////
void main(void)
{
    String s1='a';
    String s2=12;
    String s3=s1+s2;
 
    s3.view();
 
    cout << "\n" << endl;
 
    getch();
}
Yandex
Объявления
23.11.2012, 17:25     Преобразование int и char в строку
Ответ Создать тему
Опции темы

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