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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.86
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
#1

itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) - C++

27.02.2011, 18:48. Просмотров 4620. Ответов 38
Метки нет (Все метки)

доброе утор, день, вечер. нужна реализация itoa, у меня получилось следующее

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char ito(int value)
    {
        int tmp_value = value;
        value /= 10;
        if (value) result[j]=ito(value);
        j++;
        int k=tmp_value-value*10;
        return ptr[k];
    }
char *itoa(int value) 
    {
        char *result="";
        char *ptr= "0123456789abcdef";
        int j=0;
        result=result+ito(value);
        return result;
    }
компилится. но вылетает на строке

C++
1
return ptr[k];
выскакиевает уведомление. ругается благим компиляторским матом:
Необработанное исключение типа "System.NullReferenceException" произошло в my bnf.exe

Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
пробовал по разному, выдает ошибки при компиляции

Добавлено через 5 минут
и еще, кто скажет, почему конкат срабатывает криво

C++
1
2
3
4
String^ s=richTextBox1->Lines[i];
String^ t=gcnew String(itoa(253));
String^ k=". ";
String^ h=String::Concat( t, k, s);
в итоге h=t

Добавлено через 6 минут
а если есть другие способы конвертирования числа в String ^ или в char *?)буду благодарен)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 22:43  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #16
Цитата Сообщение от ValeryS Посмотреть сообщение
она больше не нужна зачем ее хранить
ну да, да хранить незачем. согласен. это не суть важно. важно что StackSymb по выходу из pop/push возвращается в состояние до вызова.
можешь сказать что с конструктором делать? я так понял надо как public функции в структуру затолкать pop и push?
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
02.03.2011, 22:49     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #17
я почитал про классы, понял что нужен конструктор
конструктор присутствует всегда
просто есть явный описанный тобой а есть который создает компилятор(по умолчанию) если ты не описал свой.
в отличии от пакаля(делфи) ты его не можешь вызвать явно он вызывается при создании объекта(конструировании)
C++
1
2
3
4
5
class a
{
int b
};
a s;// вызывается конструктор по умолчанию который выделит в памяти место под класс
C++
1
2
3
4
5
6
7
8
class a
{
int b
public:
a(){b=0};
};
a s;// вызывается твой конструктор который выделит в памяти место под класс и инициализирует переменную
s.a()//в с++ ошибка
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 23:00  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class mystack{
struct stack 
    {
        char ch;
        stack *prew;
};
public: void pop(void)
    {
        Old=StackSymb;
        StackSymb=Old->prew;
        delete(Old);
    }
void push(char c)
    {
        //stack *StackSymb;
        stack *Old=new stack;
        Old->prew=::StackSymb;
        StackSymb=Old;
        StackSymb->ch=c;
    }
}
Добавлено через 26 секунд
а хотя конструктор должен иметь такое же название как и клас?

Добавлено через 1 минуту
я где то встречал еще что можно функции класса описать вроде, да?
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
02.03.2011, 23:02     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #19
Цитата Сообщение от LeX BB Посмотреть сообщение
а хотя конструктор должен иметь такое же название как и клас?
да
деструктор тоже название с тильдой~
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 23:04  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #20
Цитата Сообщение от ValeryS Посмотреть сообщение
да
деструктор тоже название с тильдой~
ммм) push - конструктор, pop - деструктор) интересная идея)
pavel876
2 / 4 / 0
Регистрация: 02.03.2011
Сообщений: 56
02.03.2011, 23:04     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #21
ЭХ ВОТ ТАК
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 23:05  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #22
pavel876, первый мессаг решил запостить сюда?)
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
02.03.2011, 23:07     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #23
завтра напишу простейшую реализацию стека
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 23:09  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #24
ValeryS, ладно, с конструктором в таком случае понятно. а деструктор как вызываться будет?

Добавлено через 1 минуту
C++
1
~stack StackSymb;
как то так?
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
02.03.2011, 23:09     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #25
Цитата Сообщение от LeX BB Посмотреть сообщение
ммм) push - конструктор, pop - деструктор) интересная идея)
с какого перепугу
mystack() конструктор
~mystack() деструктор
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 23:10  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #26
Цитата Сообщение от ValeryS Посмотреть сообщение
с какого перепугу
mystack() конструктор
~mystack() деструктор
описать внутри mystack() push, а внутри ~mystack() - pop?
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
02.03.2011, 23:14     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #27
Цитата Сообщение от LeX BB Посмотреть сообщение
ладно, с конструктором в таком случае понятно. а деструктор как вызываться будет
деструктор как и конструктор явно не вызываетсь
он вызывается при разрушении объекта
LeX
246 / 246 / 63
Регистрация: 30.06.2010
Сообщений: 927
02.03.2011, 23:18  [ТС]     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #28
Цитата Сообщение от ValeryS Посмотреть сообщение
деструктор как и конструктор явно не вызываетсь
он вызывается при разрушении объекта
т.е. получается как вариант реализации внутри структуры вышеописанным образом объявить push и pop, потом их вызывать?

это получается как то так?:
C++
1
2
StackSymb->push(c);
StackSymb->pop();
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
03.03.2011, 19:22     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #29
реализация стека через классы
Stack.h
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
#pragma once
 
// класс элемента стека
class CStack
{
public:
    CStack(void);      // конструктор
    ~CStack(void);     // деструктор
 
    CStack* pNext;
    int value;
 
 
};
// класс кадра стека
class CFrameStack
{
public:
    CFrameStack(void);   // конструктор 
    ~CFrameStack(void);  // деструктор
    bool IsEmpty(void);  // проверка Пустой ли стек
    int pop(void);
    void push(int v);
private:
   CStack *TopStack;      //указатель вершины стека
};
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
// Stack.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "Stack.h"
 
 
 
CStack::CStack(void) // конструктор инициализирует  переменные
: pNext(NULL)
, value(0)
{
}
 
CStack::~CStack(void)
{
 
}
CFrameStack::CFrameStack(void)//конструктор инициализирует  переменные
:TopStack(NULL)
{
}
CFrameStack::~CFrameStack(void) //деструктор 
{
while(!IsEmpty())             // если стек не пуст 
     pop();                   // удаляем элементы
}
 
bool CFrameStack::IsEmpty(void)
{
    return (TopStack==NULL);   // проверка пустоты стека
}
 
int CFrameStack::pop(void)      // достать с вершины стека 
{
    if(IsEmpty()) return -1;    // если стек пуст выйти
    CStack * tmp=TopStack;      // выделяем элемент стека 
    TopStack=tmp->pNext;        // указатель на предыдущий элемент
    int res=tmp->value;         // значение 
    delete tmp;                 // удаляем элемент стека
    return res;                  // вернуть значение
    
}
 
void CFrameStack::push(int v)  // положить на вершину стека
{
    CStack * tmp1=new CStack;  // создать новый элемент
    tmp1->value=v;             // присвойть значение 
    tmp1->pNext=TopStack;     // указатель на старый элемента
    TopStack=tmp1;             //вершина стека новай элемент
    return ;
}
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    CFrameStack st;
  for(int i=0;i<10;i++)
    {
      printf("%d ",i);
      st.push(i);
    }
      printf("\n");  
     for(int i=0;i<10;i++)
     {
      printf("%d ",st.pop());
     } 
 
      return 0;
}
С уважением Валерий
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2011, 20:22     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию)))
Еще ссылки по теме:
C++ Перевод числа в строку
Перевод из числа в строку C++
C++ Перевод числа в строку
Перевод числа в строку и обратно C++
C++ Перевод вещественного числа в строку!

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.03.2011, 20:22     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию))) #30
Цитата Сообщение от ValeryS Посмотреть сообщение
деструктор как и конструктор явно не вызываетсь
Деструктор можно вызвать явно, ничего этому не мешает.
Yandex
Объявления
03.03.2011, 20:22     itoa. перевод числа в строку. реализуем вырезанную из стандарта функцию)))
Ответ Создать тему
Опции темы

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