Как проверить тип данных данного ввода в cpp? - PullRequest
0 голосов
/ 04 сентября 2018

Если я даю 10 означает, что это должно вывести это целое число Если я даю 10,2 означает, что он должен напечатать это поплавок Если я даю «а», значит, он должен напечатать это символ

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы можете использовать type_traits и специализацию шаблона для достижения этой цели. Пожалуйста, смотрите этот пример для получения дополнительной информации: -

#include <iostream>
#include <type_traits>

template<typename T>
struct is_integer{
    static const bool value = false;
};

template<>
struct is_integer<int>{
    static const bool value = true;
};

template<typename T>
struct is_char{
    static const bool value = false;
};

template<>
struct is_char<char>{
    static const bool value = true;
};

template<typename T>
void printType(T t){
    if(is_integer<T>::value)
    {
        std::cout<<"Value is integer"<<std::endl;
    }
    else if(is_char<T>::value)
    {
        std::cout<<"Value is char"<<std::endl;
    }
    else if(std::is_floating_point<T>::value)
    {
        std::cout<<"Value is float"<<std::endl;
    }
}

int main()
{
    int i = 10;
    char j = 'a';
    float k = 10.2f;

    printType(i);
    printType(j);
    printType(k);

    return 0;
}
0 голосов
/ 04 сентября 2018

Сначала прочитайте ввод как std::string.

Затем передайте строку в std::stoi(), и если она без ошибок использует всю строку, выведите полученное целое число.

В противном случае передайте строку в std::stof(), и, если она поглотит всю строку без ошибок, выведите полученное значение с плавающей точкой.

В противном случае выведите строку как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...