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

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

Войти
Регистрация
Восстановить пароль
 
CyberaTino
64 / 19 / 4
Регистрация: 12.06.2011
Сообщений: 92
#1

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

12.06.2011, 02:45. Просмотров 816. Ответов 7
Метки нет (Все метки)

Пишу простенький конвертер, переводящий числа в слова. Проектирование на начальном этапе находится, поэтому функции постепенно дорабатываю.
Сейчас прога компилиться нормально и адекватно реагирует на ввод (плюёт в консоли ерорры, где надо) - прога может адекватно отрегировать на ввод строки, содержащей нецифры. Но как только вводится просто цифра, прога не выводит ничего, а точнее выводит пустую строку. Функция 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;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2011, 02:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пишу конвертер: число в строку (C++):

Программа на С, которая вводит число типа int с клавиатуры, преобразует ее в строку (str), выводит на дисплей число и строку. - C++
Задача направленная на усвоение следующих понятий: прототип функции; заголовок функции; тело функции; параметры, принимаемые функцией...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. - C++
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. ...

Преобразовать число в строку/строкук в число - C++
Обьясните, как преобразововать число в строку и наоборот. Искал в гугле, но конкретного ответа так и не получил (все, что узнал, что есть...

Преобразовать строку->число->строку - C++
Всем доброго времени суток! Скоро будет экзамен по программированию.С++ начали изучать в конце семестра. В билете задача написать программу...

Необходимо вывести строку prime, если число простое, или composite, если число составное - C++
Уважаемые программисты, проверьте, пожалуйста, решение задачи Проверьте, является ли число простым. Вводится одно число n. Формат...

Конвертировать строку с датой и временем в число секунд и наоборот - число секунд в дату и время - C++
Здравствуйте. Подскажите пожалуйста есть строки типа char/string: 2015.04.30 06:30 как перевести данное время в число секунд. И...

7
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
12.06.2011, 04:18 #2
Новый велик?
Зачем писать то, что уже есть в стандартных библиотех с/с++?
пользуйся на здоровье!

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

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

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

Не по теме:

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

0
CyberaTino
64 / 19 / 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, благодарю за ссыль. Однако задача реализовать в классе. А алгоритмическое решение итак лежит на поверхности. Мне бы просто эту техническую неполадку победить и двинуться дальше.
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
12.06.2011, 15:52 #8
Ну для начала всё-таки исправь symbConverter, чтобы строка гарантированно заканчивалась нулём. Чтобы не думалось
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 15:52
Привет! Вот еще темы с ответами:

Строку в число - C++
Есть фаил с выражением, например (22.3+69-69*98+23.5) Как считатать из него так, чтоб отделять отдельна целиком числа, отдельна знаки?

Число в строку - C++
Как перевести число в строку не используя itoa и фишек из нового стандарта типа stoi и т.п. Возможно-ли это через stringstream? ...

Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри - C++
Дано целое число , лежащие в диапазоне от -999 до 999. Вывести строку - словесного описание данного числа вида &quot;отрицательное двухзначное...

Сконвертировать строку в число - C++
подскажите пожалуйста, вот я беру из текстового файла число и оно у меня получается типа стринг, а его можно как-то зделать флоат или там...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
12.06.2011, 15:52
Ответ Создать тему
Опции темы

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