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

Пишу конвертер: число в строку - C++

Восстановить пароль Регистрация
 
CyberaTino
 Аватар для CyberaTino
63 / 18 / 4
Регистрация: 12.06.2011
Сообщений: 92
12.06.2011, 02:45     Пишу конвертер: число в строку #1
Пишу простенький конвертер, переводящий числа в слова. Проектирование на начальном этапе находится, поэтому функции постепенно дорабатываю.
Сейчас прога компилиться нормально и адекватно реагирует на ввод (плюёт в консоли ерорры, где надо) - прога может адекватно отрегировать на ввод строки, содержащей нецифры. Но как только вводится просто цифра, прога не выводит ничего, а точнее выводит пустую строку. Функция symbConverter() свою работу делает нормально (сопоставляет число строке, взятой из array.h) и через cout прекрасно выводит нужный результат. Проблема в том, что syntaxAnalyzer() при вызове в main() отображает пустую строку, хотя должна возвращать char* , которую берет из symbConverter(). Бился целый день...
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
/*File 'interpretator.cpp'*/
 
#include <iostream>
#include "interpretator.h"
#include "arrays.h"
 
#define ERROR_5 "err_5"
#define ERROR_6 "err_6"
#define ERROR_7 "err_7"
 
char* interpretator::syntaxAnalyzer() {
        int rank;
        if (Nmbrs!=NULL) //Nmbrs закрытая переменная типа char* класса interpretator
            rank = strlen(Nmbrs);
        else
            return ERROR_5;
        if (rank==1)
            return symbConverter(Nmbrs[0]); //вот здесь Бермудский треугольник
        else
            return ERROR_6;
        
    }
 
char* interpretator::symbConverter (char digit) {
    unsigned int i, arraySize;
    char *tmp = ERROR_7;
    cout << tmp << endl;
    for (i=0; i<11; i++) {
        if ((digit!=NULL) && (digit==digs[i][0])) {
            arraySize = strlen(digs[i]); //digs содержит {"1один", "2два", "3три" ...}  и взята из arrays.h
            tmp = new char [arraySize];
            for (unsigned int j=0; j<arraySize; j++)
                tmp[j] = digs[i][j];
            //cout << tmp; - здесь выводится нормально
            }
        }
        return tmp;
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
12.06.2011, 04:18     Пишу конвертер: число в строку #2
Новый велик?
Зачем писать то, что уже есть в стандартных библиотех с/с++?
пользуйся на здоровье!

ПС если нужно могу подсказать какие
CyberaTino
 Аватар для CyberaTino
63 / 18 / 4
Регистрация: 12.06.2011
Сообщений: 92
12.06.2011, 15:18  [ТС]     Пишу конвертер: число в строку #3
Цитата Сообщение от tylix Посмотреть сообщение
Новый велик?
понимаю, что вы говорите об itoa() , но здесь прога принимает на вход символ "1", а выдает строку "один". если есть такая функция в стандртной библиотеке, в чем я очень сомневаюсь, то жажду услышать её название.

если нет, то ответьте, пожалуйста по сабжу
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
12.06.2011, 15:22     Пишу конвертер: число в строку #4
Ну, в приведённом фрагменте особых проблем не видно. Разве что завершающий ноль не копируется. Не знаю, может ли это вызывать подобное поведение, но ошибка может находиться в совершенно другой части программы.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.06.2011, 15:24     Пишу конвертер: число в строку #5
Вывести число прописью
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
12.06.2011, 15:28     Пишу конвертер: число в строку #6
Цитата Сообщение от CyberaTino Посмотреть сообщение
понимаю, что вы говорите об itoa() , но здесь прога принимает на вход символ "1", а выдает строку "один". если есть такая функция в стандртной библиотеке, в чем я очень сомневаюсь, то жажду услышать её название.

если нет, то ответьте, пожалуйста по сабжу

Не по теме:

Упс.. сорри...

CyberaTino
 Аватар для CyberaTino
63 / 18 / 4
Регистрация: 12.06.2011
Сообщений: 92
12.06.2011, 15:47  [ТС]     Пишу конвертер: число в строку #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
ошибка может находиться в совершенно другой части программы.
Вот main():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main (int argc, char *argv[])
{
    locale().global(locale(""));
    if (argc!=2)
    {
        cout << "\nИспользование программы: <interpr> 'число'\n";
        exit (1);
    }
    if (interpretator::checkForChars(argv[1])==true) { //здесь уже отлажено и работает нормально
        cout << "\nВведенная строка не является числом, либо превышает 10 знаков\n" << endl;
        cout << "Использование программы: <interpr> 'число'\n";
        exit (2);
    }
    interpretator Pronouncer (argv[1]);
    cout << Pronouncer.syntaxAnalyzer() << endl; //вот здесь не работает
    exit(4);
    return 0;
}
Maxwe11, благодарю за ссыль. Однако задача реализовать в классе. А алгоритмическое решение итак лежит на поверхности. Мне бы просто эту техническую неполадку победить и двинуться дальше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 15:52     Пишу конвертер: число в строку
Еще ссылки по теме:

C++ Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри
Необходимо вывести строку prime, если число простое, или composite, если число составное C++
Сравнить число и строку C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
12.06.2011, 15:52     Пишу конвертер: число в строку #8
Ну для начала всё-таки исправь symbConverter, чтобы строка гарантированно заканчивалась нулём. Чтобы не думалось
Yandex
Объявления
12.06.2011, 15:52     Пишу конвертер: число в строку
Ответ Создать тему
Опции темы

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