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

Строки. Определить, является ли он правильной десятичной записью вещественного числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Lightness
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 9
15.05.2013, 09:11     Строки. Определить, является ли он правильной десятичной записью вещественного числа #1
Дан текст. Определить, является ли он правильной десятичной записью вещественного числа.

Помогите с алгоритмом, пожалуйста. Что и в какой последовательности лучше проверять
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 09:11     Строки. Определить, является ли он правильной десятичной записью вещественного числа
Посмотрите здесь:

Выяснить является ли заданная строка записью десятичного вещественного числа. C++
Определить, является ли введенная строка правильной записью целого шестнадцатеричного числа без знака C++
C++ Текст является десятичной записью числа, кратного 9
C++ Определить, является ли текст десятичной записью числа, кратного 9
ООП. Определить, является ли текст десятичной записью числа, кратного 4 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
15.05.2013, 10:13     Строки. Определить, является ли он правильной десятичной записью вещественного числа #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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
#define N 7
 
int main(int argc, char* argv[])
{
    static char str[256] = "1289312938.30420388230984\0";
 
    printf("%s\n",str);
 
    bool error = false;
    if (!strchr(str,'.')) error = true;
    for (int i = 0; str[i] != '\0' && !error; i++)
        error = (!isdigit(str[i]) && str[i] != '.') ? 1 : 0;
 
    printf("%s",str);
    if (error != false) printf("\terror!!!");
 
    printf("\n");
 
    _getch();
 
    return 0;
}
http://codepad.org/k7Azr72I
Миниатюры
Строки. Определить, является ли он правильной десятичной записью вещественного числа  
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.05.2013, 12:07     Строки. Определить, является ли он правильной десятичной записью вещественного числа #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <algorithm>
 
bool isRealNum( const std::string& str )
{
    auto pos = std::find( str.begin(), str.end(), '.' );
    if( pos == str.end() ) return false;
    return( std::all_of( str.begin(), pos, ::isdigit ) && 
            std::all_of( pos+1, str.end(), ::isdigit ) );
}
 
int main() {
    std::string str = "1289312938.30420388230984";
    std::cout << std::boolalpha << isRealNum(str) << std::endl;
    return 0;
}
Добавлено через 7 минут
zitxbit, почему сишный код в разделе плюсов?

C++
1
static char str[256] = "1289312938.30420388230984\0";
Зачем static? Размер можно опустить. \0 в конце вообще не нужен.

C++
1
2
bool error = false; 
if (!strchr(str,'.')) error = true;
Можно записать как:
C++
1
bool error = !strchr(str,'.');
C++
1
error = (!isdigit(str[i]) && str[i] != '.') ? 1 : 0;
Тернарный оператор совсем не нужен тут.

C++
1
#define N 7
Зачем это вообще?

Ну, и напоследок, проверьте строку в которой несколько десятичных точек.
gray_fox
15.05.2013, 12:07
  #4

Не по теме:

Tulosba, так одна точка тоже будет числом.

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.05.2013, 12:10     Строки. Определить, является ли он правильной десятичной записью вещественного числа #5
Цитата Сообщение от gray_fox Посмотреть сообщение
так одна точка тоже будет числом.
согласен
добавим в начало:
C++
1
if( str.length() == 1 ) return false;
Lightness
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 9
19.05.2013, 20:35  [ТС]     Строки. Определить, является ли он правильной десятичной записью вещественного числа #6
Tulosba, а как это сделать без использования третьей библиотеки?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 21:17     Строки. Определить, является ли он правильной десятичной записью вещественного числа #7
Цитата Сообщение от Lightness Посмотреть сообщение
Tulosba, а как это сделать без использования третьей библиотеки?
Если речь про std::all_of, то можно проверить в цикле все символы до и после точки на то, что они являются цифрами.
dickivs
 Аватар для dickivs
46 / 46 / 6
Регистрация: 25.11.2011
Сообщений: 267
19.05.2013, 21:30     Строки. Определить, является ли он правильной десятичной записью вещественного числа #8
Похожее встречал в Дейтеле, с использованием обработки строковых потоков.
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
// Рис. 18.12: Figl8_12.cpp 
// Демонстрация ввода из объекта istringstream. 
#include <iostream> 
using std::cout; 
using std::endl; 
 
#include <string> 
using std::string; 
 
#include <sstream> 
using std::istringstream; 
 
int main() 
{ 
        string input( "Input test 123 4.7 A" ); 
        istringstream inputString( input ); 
        string stringl; 
        string string2; 
        int integer; 
        double doublel; 
        char character; 
 
        inputString >> stringl >> string2 >> integer >> doublel >> character; 
 
        cout << "The following items were extracted\n" 
             << "from the istringstream object:" << "\nstring: " << stringl << "\n string: " << string2 << "\n int: " << integer 
             << "\ndouble: " << doublel << "\n char: " << character; 
    
        // попытка чтения из пустого потока 
        long value; 
        inputString >> value; 
        
        // проверить результат потока 
        if ( inputString.good() ) 
            cout << "\n\nlong value is: " <<  value <<  endl; 
        else 
            cout <<  "\n\ninputString is empty" <<  endl; 
 
return 0;
}// конец main
outputString contains:
Output of several data types to an ostringstream object:
double: 123.457
int: 22
address of int: 1244580
after additional stream insertions,
outputString contains:
Output of several data types to an ostringstream object:
double: 123.457
int: 22
address of int: 1244580
more characters added
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
19.05.2013, 21:31     Строки. Определить, является ли он правильной десятичной записью вещественного числа #9
Цитата Сообщение от Lightness Посмотреть сообщение
а как это сделать без использования третьей библиотеки?
Самому их написать
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
#include <iostream>
#include <string>
 
typedef std::string::const_iterator iterator_t;
typedef int (*predicate_t)(int);
 
iterator_t find(iterator_t first, iterator_t const last, char const value) {
   for ( ; first != last; ++first) {
      if (*first == value) {
         break;
      }
   }
   return first;
}
 
bool all_of(iterator_t first, iterator_t const last, predicate_t const predicate) {
   for ( ; first != last; ++first) {
      if (!predicate(*first)) {
         return false;
      }
   }
   return true;
}
 
bool isRealNum( const std::string& str )
{
    iterator_t pos = find( str.begin(), str.end(), '.' );
    if( pos == str.end() ) return false;
    return( all_of( str.begin(), pos, ::isdigit ) && 
            all_of( pos+1, str.end(), ::isdigit ) );
}
 
int main() {
    std::string str = "1289312938.30420388230984";
    std::cout << std::boolalpha << isRealNum(str) << std::endl;
    return 0;
}
Tulosba
19.05.2013, 21:47
  #10

Не по теме:

gray_fox, так одна точка тоже будет числом.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 21:53     Строки. Определить, является ли он правильной десятичной записью вещественного числа
Еще ссылки по теме:

C++ Определить, является ли текст десятичной записью числа, кратного 5
C++ Проверить, является ли текст десятичной записью числа, кратного 5
C++ Определить, является ли текст десятичной записью числа, кратного 5

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

Или воспользуйтесь поиском по форуму:
gray_fox
19.05.2013, 21:53     Строки. Определить, является ли он правильной десятичной записью вещественного числа
  #11

Не по теме:

Tulosba, чёртовы точки)

Yandex
Объявления
19.05.2013, 21:53     Строки. Определить, является ли он правильной десятичной записью вещественного числа
Ответ Создать тему
Опции темы

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