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

Чтение строки - C++

Восстановить пароль Регистрация
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 02:14     Чтение строки #1
Требуется написать функцию, которая читает строка размеров не более 40 символов. Строка представляет собой десятичное число. Ввод должен происходить по аналогии с cin >> str, но с некоторыми изменениями.

Вопрос 1: Как и где лучше хранить знак числа в самой строке или нет? Я в классе определил поле типа bool, которое указывает на положительность или отрицательность числа.

Вопрос2:Как привести функцию к более компактному виду? Хотелось бы посмотреть ваши варианты реализации данной функции.

Вот моя:

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
void HugeInteger::inputHugeInteger(void){
    int i, count = 0;         //count - счётчик прочитанных чисел
    char ch;         
 
    while(isspace(ch = getchar()));
    
    if(!isdigit(ch)){
        if(ch == '-') sgn = false;
        else if (ch == '+') sgn = true;
        else if(ch == '\n') return;
        else{
            ungetc(ch, stdin);
            return;
        }
    }
    
     //num объявлен как char num[sizeArray + 1], sizeArray = 40;
     for(i = sizeArray - 1; i >= 0; i--, count++){
        ch = (char)getchar();
        if(!isdigit(ch)) break;
        num[i] = ch;
    }
    
        if((ch = getchar()) != '\n') ungetc(ch, stdin);
      
  //как вы заметили числа записываются с конца к началу, что соотв.обратному порядку
        //поэтому после,того как прочитана строка, подстрока (или вся строка) разворачивается
       //в конструкторе всем элементам присваиваются значения '0'
 
    if(count) RevStr(num + strlen(num) - count);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2012, 02:14     Чтение строки
Посмотрите здесь:

Чтение строки C++
C++ Чтение строки
чтение строки C++
Чтение строки C++
Чтение строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
04.09.2012, 06:32     Чтение строки #2
Мои вопросики:
1) а вы, часом, не пишите ли программу, которая реализует арифметические операции между "длинными" числами (>10 знаков в записи числа)?
2) Ваше приложение оконное или консольное?
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 09:25  [ТС]     Чтение строки #3
консольное
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
04.09.2012, 09:40     Чтение строки #4
Цитата Сообщение от bgm313 Посмотреть сообщение
консольное
А про мой первый вопрос?
В вашем случае нет разницы, где вы храните знак. И в случае, когда знак вводится вместе с числом, и отдельно вам придется обрабатывать данные (а то нарветесь на какой нибудь error при исполнении).
Лучше все вынести в одну строку и в одну функцию, занимающуюся обработкой строки
А про это:
Цитата Сообщение от bgm313 Посмотреть сообщение
//как вы заметили числа записываются с конца к началу, что соотв.обратному порядку
//поэтому после,того как прочитана строка, подстрока (или вся строка) разворачивается
//в конструкторе всем элементам присваиваются значения '0'
Вы калькулятор пишите?
Если так, то знак лучше хранить как (int) -1 и 1 дабы упростить код и вычисления. также приведу примерчик из своей программы (только моя функция проверяет, является ли строка беззнаковым рац. числом):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool isNumeral(char *str)
{
    int i = 0;
    bool poi = false;
 
    if(str[0]=='.')return false;
 
    while( str[i] != '\0')
    {
        if(str[i] == '.' && poi)return false;
        if(!(isdigit(str[i]) || str[i] == '.'))
        {
            return false;
        }
 
        if(str[i] == '.' && !poi)poi = true;
        i++;
    }
 
    return true;
}
если будете использовать, то ее надо несколько переделать.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 12:45  [ТС]     Чтение строки #5
Цитата Сообщение от Hydrogen Посмотреть сообщение
1) а вы, часом, не пишите ли программу, которая реализует арифметические операции между "длинными" числами (>10 знаков в записи числа)?
По названию класса, я думаю всё и так понятною
Yandex
Объявления
04.09.2012, 12:45     Чтение строки
Ответ Создать тему
Опции темы

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