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

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

Войти
Регистрация
Восстановить пароль
 
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
#1

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

23.11.2012, 04:19. Просмотров 731. Ответов 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
#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();
}
В чем собственно ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 04:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование int и char в строку (C++):

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Преобразование int к char - C++
Вот код #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream.h&gt; #include &lt;cstdio&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; ...

Преобразование char в int - C++
Решаю задачу из книги, требуется написать программу, которая запрашивает у пользователя степень и возводит в эту степень число, надо...

Преобразование Int в char - C++
от скуки баловался с кодом.решил проверить,можно ли сделать так? #include &lt;iostream&gt; int main(){ char b = 't'; int a =b; ...

Преобразование int char и обратно - C++
надо разложить число на два байта... unsigned char ghj; int fff = 11111; ghj = fff / 256; ghj = fff - (ghj * 256); //обратно ...

преобразование между char и int - C++
Зачем? Чтобы работать с char как с целыми числом, принимающим значение от 0 до 255. Специально для этой цели я написал такой класс: class...

6
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
23.11.2012, 04:23 #2
C++
1
2
3
4
5
6
    String(int x)
    {
        char *p="";
        itoa(x,p,2);
        strcpy(str,p);
    }
p указывает на константный литерал. Выделите память динамически.
0
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 04:34  [ТС] #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);
    }
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
23.11.2012, 04:37 #4
Это же конструктор. Где выделение памяти под str? При strcpy str у Вас указывает черть его знает куда.
0
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 04:49  [ТС] #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;
    }
Но при нем выдает ошибку.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
23.11.2012, 06:15 #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();
}
Так, вроде, работает, но я бы переписал весь код.
1
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
23.11.2012, 17:25  [ТС] #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();
}
0
23.11.2012, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 17:25
Привет! Вот еще темы с ответами:

Преобразование const char* в int - C++
Всем привет. В исходниках одного проекта встретил вот такой участок. typedef struct { char* name; int* location; ...

Преобразование 2-х char в один short int - C++
Пробую преобразовать 2 char в один short int таким образом: char buf; short int skl; int kol=0; for(int...

Преобразование указателя из char в int и double - C++
указатель sadr является типом char мне нужно перопределить его на типы на int и double int a; double b; void cr(char **sadr) { ...

Преобразование из int в char в массиве (не обычно) - C++
Прет всем. есть файл с 2 строками 456321 hi man Нужно поставить по индексу типо если первая цифра 4, то берем 4 сивол из строки...


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

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

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