C/C++中如何判断一个输入的变量是否和其定义的类型一致
2015-12-18 19:55
881 查看
思路:
所有的变量都字符串来表示,先判断该字符串是否符号该数据类型的构造形式,然后再把字符串转换成对应的数据类型。比如,现在要输入一个(int)整型变量,则先定义一个string类型的变量str(C语言中对应用char[]数组)来保存想输入的整型变量,然后判断这个字符串中是否只含有’0’~’9’这10个字符型常量,如果是true,则再转换成int型变量,否则结束。这儿提供了如下五个函数:
bool isInteger(const string &str); //是否为整型 bool isFloat(const string &str);//是否为浮点型 string convertToString(const double x);//浮点转换为字符串 long long convertToInteger(const string& str);//字符串转整型 double convertToDouble(const string & str);//字符串转浮点
这几个函数可以分别分开使用,也可以进行封装。比如在进行转换之前肯定要判断该量变和其定义的类型是否一致,所以就可以把判断的函数封装在转换函数里面。
源码:
// mycctype.h #ifndef MYCCTYPE_H #define MYCCTYPE_H #include <string> using namespace std; bool isInteger(const string &str); bool isFloat(const string &str); string convertToString(const double x); long long convertToInteger(const string& str); double convertToDouble(const string & str); #endif // MYCCTYPE_H //mycctype.cpp #include "mycctype.h" #include <string> #include <sstream> using namespace std; bool isInteger(const string &str) { for(string::size_type i = 0 ; i != str.length(); ++i) { if(str[i] <= '0' || str[i] >= '9') { return false; } } return true; } bool isFloat(const string &str) { int numOfDot = 0; for(string::size_type i = 0; i != str.length(); ++i) { if(str[i] >= '0' && str[i] <= '9') continue; else if (str[i] == '.') { numOfDot++; if (numOfDot > 1) { return false; } } else return false; } return true; } string convertToString(const double x) { ostringstream o; if(o << x) return o.str(); return "conversion error."; } long long convertToInteger(const string & str) { istringstream i(str); double x; if(i >> x) return x; return 0; } double convertToDouble(const string &str) { istringstream i(str); double x; if(i >> x) return x; return 0.0; } //main.cpp #include<string> #include<iostream> #include"mycctype.h" using namespace std; int main(int argc, char *argv[]) { string s; double q; for(;;) { cin>>s; if(isFloat(s))//先判断输入的变量是否为浮点型字符串(就是用字符串来保存浮点型数据) { cout<<"Yes"<<endl; q = convertToDouble(s); cout<<q<<endl; } else cout<<"No"<<endl; } return 0; }
以上代码在Linux Ubuntu 14.04 LTS 中均能正常运行
若有错误还望留言不吝指出
相关文章推荐
- 黑马程序员-C语言-结构体
- C++11: regex #2
- More Effective C++ 第六部分 杂项讨论
- c++读取文件内容并保存到二维数组
- 用OC语言实现贪吃蛇小游戏
- C++ thrift详细教程 及和Protobuf对比
- C语言结构体 别名定义
- C语言 gets()和scanf()函数的区别
- C++11: regex #1
- 【转载】C语言中scanf格式化输入函…
- C++中的向量学习
- C++中的set
- [转]C++map的基本操作和使用
- C /C++标准库 - <ctime> (time.h)
- 黑马程序员—C语言—(关键字、标识符、数据、常量、变量、注释)
- C++处理异常技巧-try,catch,throw,finally
- HDOJ&nbsp;&nbsp;2024&nbsp;&nbsp;&nbsp;&nbsp;C语言合法标识符
- C语言中的qsort函数
- C++中的sort函数
- 黑马程序员-C语言-Xcode常用快捷键