64 / 19 / 2
Регистрация: 12.06.2011
Сообщений: 92
1

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

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

Author24 — интернет-сервис помощи студентам
Пишу простенький конвертер, переводящий числа в слова. Проектирование на начальном этапе находится, поэтому функции постепенно дорабатываю.
Сейчас прога компилиться нормально и адекватно реагирует на ввод (плюёт в консоли ерорры, где надо) - прога может адекватно отрегировать на ввод строки, содержащей нецифры. Но как только вводится просто цифра, прога не выводит ничего, а точнее выводит пустую строку. Функция 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2011, 02:45
Ответы с готовыми решениями:

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

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

Конвертер валют. Как округлить число до сотых?
Доброго времени суток! Изучаю java и столкнулся с проблемой. Суть задачи такова. Пользователь...

Пишу функцию, подсчитывающую число символов (как strlen), но не получается
Проблема в том,что компилятор ругается на несоответствие типов в строке 8(условие в while).Пробовал...

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

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

если нет, то ответьте, пожалуйста по сабжу
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
12.06.2011, 15:22 4
Ну, в приведённом фрагменте особых проблем не видно. Разве что завершающий ноль не копируется. Не знаю, может ли это вызывать подобное поведение, но ошибка может находиться в совершенно другой части программы.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
12.06.2011, 15:24 5
Вывести число прописью
0
68 / 55 / 11
Регистрация: 10.06.2011
Сообщений: 149
12.06.2011, 15:28 6
Цитата Сообщение от CyberaTino Посмотреть сообщение
понимаю, что вы говорите об itoa() , но здесь прога принимает на вход символ "1", а выдает строку "один". если есть такая функция в стандртной библиотеке, в чем я очень сомневаюсь, то жажду услышать её название.

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

Не по теме:

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

0
64 / 19 / 2
Регистрация: 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
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
12.06.2011, 15:52 8
Ну для начала всё-таки исправь symbConverter, чтобы строка гарантированно заканчивалась нулём. Чтобы не думалось
0
12.06.2011, 15:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2011, 15:52
Помогаю со студенческими работами здесь

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

Пишу клиент для HTTPS с использованием сокетов. При тесте получаю ответ 302 и непонятную строку location
Привет! Вообще пишу на яве, но вопрос явы не касается. Вопрос касается наверное больше веб...

Считать строку, и найти число вхождений символа в эту строку (с использованием strchr)
Почему не работает, компилятор ошибок не ловит, при запуске вылетает с ошибкой. Программа должна...

Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом - см. текст задачи
Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина...

Ввести строку, число N. Вывести введенную строку на экран N раз (перевести в 32 битную версию)
org 100h mov ah,9 mov dx,msg1 int 21h ...

Преобразовать число в строку записать строку в обратном порядке
Дано шестизначное натуральное число. Преобразовать его в строку. Записать полученную строку в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru