Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 3
Регистрация: 01.10.2014
Сообщений: 97
1

Выяснить, является ли текст числом

05.11.2014, 23:23. Показов 719. Ответов 8
Метки нет (Все метки)

Дан текст. Выяснить, является ли он числом. Отрицательные числа содержат в начале знак минус
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2014, 23:23
Ответы с готовыми решениями:

Выяснить, является ли s-й элемент массива положительным числом
Дан массив целых чисел. Выяснить, а) является ли s-й элемент массива положительным числом, б)...

Выяснить, является ли сумма элементов четвертой строки массива двузначным числом
Дан двумерный массив. Выяснить, является ли сумма элементов четвертой строки массива двузначным...

Выяснить, является ли заданный текст идентификатором
Как написать такой код ? Дан текст. Выяснить является ли он индетификатором. Индетификатор - это...

Выяснить, является ли заданный текст идентификатором
Помогите! Необходимо выяснить , является ли заданный текст идентификатором на языке С++.

8
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
05.11.2014, 23:46 2
Если в тексте все символы числа, то является.
0
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 31
06.11.2014, 00:11 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream> 
using namespace std;
#include <string.h>
#include <stdio.h>
 
void main(){
    char str[100];
    gets(str); //получаем строку
    int num = 0; //счетчик цифр
    strlen(str);
    int x = strlen(str);  //количество символов в веденной строке
    for (int i = 0; i < x; i++){
        if (isdigit(str[i]) > 0){
            num++;
            cout << str[i] << "\t";
        }
    }
    cout << endl;
    cout << "Numbers: " << num << endl;
}
0
2061 / 617 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.11.2014, 01:39 4
C++
#include <stdio.h>
#include <string.h>
 
bool isadig(char c[], int n)
{
    for(int i = 0; i < n; i++) if( c[i] < '0' || c[i] > '9') return false;
    return true;
}
 
int main()
{
    char c[] = "3145360828";
 
    if( isadig(c,strlen(c))==true ) printf("digit\n");
    else                            printf("not digit\n");
 
    return 0;
}
0
0 / 0 / 3
Регистрация: 01.10.2014
Сообщений: 97
06.11.2014, 02:13  [ТС] 5
Спасибо вам!
0
С чаем беда...
Эксперт CЭксперт С++
9441 / 4935 / 1350
Регистрация: 18.10.2014
Сообщений: 11,491
06.11.2014, 03:07 6
Я смотрю все "решатели" смело проигнорировали замечание ТС про минус и отрицательные числа...

Задача решается через стандартную функцию 'strtol' в одну строчку

C++
1
2
3
4
5
bool is_number(const char s[])
{
  char *e;
  return s != NULL && !isspace(*s) && (strtol(s, &e, 10), *e == '\0');
}
Проверка на 'isspace' добавлена потому, что 'strtol' сам по себе допускает наличие начальных пробелов в строке. Если и вы не против, то 'isspace' из проверки можно убрать. Тогда 'strtol' - это фактически готовое решение задачи.

Также вышеприведенный вариант допускает числа, начинающиеся как со знака '-', так и со знака '+', т.е., например, '+3' считается корректной записью числа. Не знаю, является ли это нарушением требований задания.
0
4772 / 2233 / 283
Регистрация: 01.03.2013
Сообщений: 5,874
Записей в блоге: 25
06.11.2014, 03:16 7
Раз пошла такая.... беседа, то даешь 0b0110, FFFF, 1.2345678E-10 и т.д.

Добавлено через 3 минуты
Да, и еще до кучи XII.

Добавлено через 1 минуту
А вообще - Пифагор утверждал - "Все есть число". По тривиальному дедуктивному выводу имеем, что любой текст является числом, и не надо ничего проверять.
0
С чаем беда...
Эксперт CЭксперт С++
9441 / 4935 / 1350
Регистрация: 18.10.2014
Сообщений: 11,491
06.11.2014, 03:24 8
Если уж на то пошло, самое время устроить некрасивую философско-гопническую дискуссию о различии понятий "число" и "запись числа".
0
342 / 342 / 331
Регистрация: 02.10.2014
Сообщений: 666
06.11.2014, 11:25 9
Код взял отсюда:
Программа, которая проверяет, является ли введенная с клавиатуры строка дробным числом
Закоментировал строки 54 и 55
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
73
74
#include <iostream>
 
using namespace std;
 
int main(){
    
    char s[80];
    cout << "Введите строку:" << endl;
    cin >> s;
    
    int b = 1;
    
    int length = -1;           //длинна строки
    while(s[++length] != '\0'){
        if ((s[length] < '0' || s[length] > '9') &&
            s[length] != '(' && s[length] != ')' &&
            s[length] != ',' && s[length] != '.' &&
            s[length] != '-'){
                b = 0;
                cout << "Содержит недопустимые символы" << endl;
                break;
            }                           
    };
    
    int pos_point;//позиция десятичной точки
    for (pos_point = 1; pos_point < length; ++pos_point)
        if (s[pos_point] == ',' || s[pos_point] == '.')
            break;
    
    int pos_brace;//позиция открывающейся скобки
    for (pos_brace = 1; pos_brace < length; ++pos_brace)
        if (s[pos_brace] == 40)
            break;
    
    for (int i = pos_point + 1; i < length; ++i)
        if (s[i] == ',' || s[i] == '.'){
            b = 0;
            cout << "Содержит больше одной точки" << endl;
            break;
        }
        
    for (int i = pos_brace + 1; i < length; ++i)
        if (s[i] == 40){
            b = 0;
            cout << "Содержит больше одной скобки" << endl;
            break;
        }
    
    if (b != 0){
        if (s[0] != '-' && (s[0] < '0' || s[0] > '9'))//не минус и не число
            b = 0;
        else if (s[0] == '-' && (s[1] < '0' || s[1] > '9'))//первый минус и
            b = 0;                                         //второй не число
        //else if (pos_point == length)//не содержит точку
        //    b = 0;
        else if (s[pos_point - 1] < '0' || s[pos_point - 1] > '9')
            b = 0;//если перед точкой нет числа
        else if (pos_brace < pos_point) //скобка раньше точки
            b = 0;
        else if (pos_brace != length && (s[pos_brace + 1] < '0' || s[pos_brace + 1] > '9'))
            b = 0;//после скобки не число
        else{
            for (int i = 1; i < length; ++i)
                if (s[i] == 41 && (i != (length - 1) || pos_brace == length)){
                    b = 0;//Имеется хотя бы одна закр. скобка не в самом конце
                    break;//Или стоит закрывающая но нет открывающей
                }                   
        }
    }
 
    cout << b << endl;
    
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2014, 11:25

Проверка является ли строка числом полностью числом или нет?
как проверить является ли строка типа &quot;23уар&quot; полностью числом или нет?

Дан текст. Выяснить, является ли он числом. Отрицательные числа содержат в начале знак минус
Подскажите как правильно оформить код, или лучше напишите с обьяснением. Буду очень благодарен

Выяснить – является ли выделенное слово числом. Если да, то каким числом (целым или вещественным)
Доброго дня всем. Помогите пожалуйста составить программу, которая выясняет – является ли...

Выяснить, является ли переменная целым числом
привет! помогите решить три задачки: 1) Составить программу проверки утверждений для введенной...


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

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

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