在c++Builder中使用boost正则表达式实现的查找double和int类型的字符串,并实现StringToInteger和StringToDouble函数
来源:互联网 发布:软件项目管理 考试 编辑:程序博客网 时间:2024/05/29 05:07
直接贴出来代码,以供参考:
// -以下为头文件定义#include"StringToNumber.h"
#include<boost/regex.hpp>//正则表达式的头文件
// #include<vector>//其实上面的代码会自动包含此头文件
// #include<string> //其实上面的代码会自动包含此头文件
// ---------------------------------------------------------------------------
// ==============================================================================
// 为标准C++库<std::string>服务
// ==============================================================================
- std::vector<std::string>FindDoubleString(std::string &Inputstring) {
- std::vector<std::string>Outputstring;
- std::string regstr =
- "([-|+]?//d+//.//d+[e|E][+|-]//d+|[-|+]?//.//d+[e|E][+|-]//d+|[-|+]?//d+//.//d{0,}|[-|+]?//d+|[-|+]?//.//d+)";
- boost::regex expression(regstr);
- boost::smatch what;
- std::string::const_iterator start = Inputstring.begin();
- std::string::const_iterator end = Inputstring.end();
- while (boost::regex_search(start, end, what, expression)) {
- std::string msg(what[1].first, what[1].second); // 提取匹配字符
- Outputstring.push_back(msg); // 将匹配结果放在vs中
- start = what[0].second; // 从此位置再次搜索
- };
- return Outputstring;
- };
// ==============================================================================
// UnicodeString For C++ Builder
// ==============================================================================
- std::vector<String>FindDoubleString(String &InputString) {
- std::string Inputstring = InputString.t_str();
- std::vector<String>OutputString;
- std::string regstr =
- "([-|+]?//d+//.//d+[e|E][+|-]//d+|[-|+]?//.//d+[e|E][+|-]//d+|[-|+]?//d+//.//d{0,}|[-|+]?//d+|[-|+]?//.//d+)";
- boost::regex expression(regstr);
- boost::smatch what;
- std::string::const_iterator start = Inputstring.begin();
- std::string::const_iterator end = Inputstring.end();
- while (boost::regex_search(start, end, what, expression)) {
- std::string msg(what[1].first, what[1].second); // 提取匹配字符
- OutputString.push_back(msg.c_str()); // 将匹配结果放在vs中
- start = what[0].second; // 从此位置再次搜索
- };
- return OutputString;
- };
//////////////////////////////////////////////////////////////////////////
////1.StringToDouble
//////////////////////////////////////////////////////////////////////////
- bool StringToDouble(String Str, double &dbl) {
- bool IsValid = false;
- std::vector<String>OutputString = FindDoubleString(Str);
- if (OutputString.size() > 0) {
- dbl = OutputString[0].ToDouble();
- IsValid = true;
- }
- return IsValid;
- };
// ==============================================================================
// 在string中查找整数integer
// ==============================================================================
- std::vector<std::string>FindIntegerString(std::string &Inputstring) {
- std::vector<std::string>Outputstring;
- std::string regstr = "([-|/+]?//d{1,10})";
- boost::regex expression(regstr);
- boost::smatch what;
- std::string::const_iterator start = Inputstring.begin();
- std::string::const_iterator end = Inputstring.end();
- while (boost::regex_search(start, end, what, expression)) {
- std::string msg(what[1].first, what[1].second); // 提取匹配字符
- Outputstring.push_back(msg); // 将匹配结果放在vs中
- start = what[0].second; // 从此位置再次搜索
- };
- return Outputstring;
- };
// ==============================================================================
// UnicodeString For C++ Builder 在String中查找整数integer
// ==============================================================================
- std::vector<String>FindIntegerString(String &InputString) {
- std::string Inputstring = InputString.t_str();
- std::vector<String>OutputString;
- std::string regstr = "([-|/+]?//d{1,10})";
- boost::regex expression(regstr);
- boost::smatch what;
- std::string::const_iterator start = Inputstring.begin();
- std::string::const_iterator end = Inputstring.end();
- while (boost::regex_search(start, end, what, expression)) {
- std::string msg(what[1].first, what[1].second); // 提取匹配字符
- OutputString.push_back(msg.c_str()); // 将匹配结果放在vs中
- start = what[0].second; // 从此位置再次搜索
- };
- return OutputString;
- };
// ==============================================================================
// StringToInteger 如果返回值为真,则Int被正确赋值
// ==============================================================================
- //////////////////////////////////////////////////////////////////////////
- ////1.StringToInteger
- //////////////////////////////////////////////////////////////////////////
- bool StringToInteger(String Str, int &Int) {
- bool IsValid = false;
- std::vector<String>OutputString = FindIntegerString(Str);
- if (OutputString.size() > 0) {
- Int = OutputString[0].ToInt();
- IsValid = true;
- }
- return IsValid;
- };
- //////////////////////////////////////////////////////////////////////////
// -以上为头文件定义#include"StringToNumber.h"
//==============================================================================
// 以下为测试程序
//==============================================================================
//
- #include <vcl.h>
- #pragma hdrstop
- #include <tchar.h>
- // ---------------------------------------------------------------------------
- #include<iostream>
- #include"StringToNumber.h"
- // using namespace std;
- // using namespace boost;
- // ---------------------------------------------------------------------------
- #pragma argsused
- // ---------------------------------------------------------------------------
- int _tmain(int argc, _TCHAR* argv[]) {
- try {
- std::string teststring = " -192.0+16.0a8.4hg93.sfe..e9.2s1+1.23e+3";
- std::vector<std::string>vstr;
- vstr = FindDoubleString(teststring);
- std::cout << "teststring" << std::endl;
- std::cout << teststring << std::endl;
- std::cout << "vstr" << std::endl;
- for (unsigned i = 0; i < vstr.size(); i++) {
- std::cout << "<" << vstr[i] << ">";
- }
- std::cout <<std::endl;
- // ==============================================================================
- // UnicodeString
- // ==============================================================================
- String testString = " -192.0+16.0a8.4hg93.sfe..e9.2s1+1.23e+3";
- std::vector<String>VStr;
- VStr = FindDoubleString(testString);
- std::cout << "testString" << std::endl;
- std::cout << testString.t_str() << std::endl;
- std::cout << "vstr" << std::endl;
- for (unsigned i = 0; i < VStr.size(); i++) {
- std::cout << "<" << VStr[i].t_str() << ">";
- }
- std::cout <<std::endl;
- // ==============================================================================
- // 测试StringToDouble
- // ==============================================================================
- double d = 0;
- String dStr = " 3498203.38403";
- // StringToDouble();
- if (StringToDouble(dStr, d)) {
- std::cout << "成功d= " << d << std::endl;
- }
- else {
- std::cout << "转换失败" << std::endl;
- }
- std::cout <<std::endl;
- // ==============================================================================
- // 在string中查找整数integer
- // ==============================================================================
- teststring = " -192.0+16.0a8.4hg93.sfe..e9.2s1+1.23e+3";
- vstr = FindIntegerString(teststring);
- std::cout << "teststring" << std::endl;
- std::cout << teststring << std::endl;
- std::cout << "vstr" << std::endl;
- for (unsigned i = 0; i < vstr.size(); i++) {
- std::cout << "<" << vstr[i] << ">";
- }
- // ---------------------------------------------------------------------------
- // ==============================================================================
- // 测试StringToInteger
- // ==============================================================================
- int i = 0;
- String iStr = " 3498203.38403";
- std::cout <<std::endl;
- if (StringToInteger(iStr, i)) {
- std::cout << "成功i= " <<i << std::endl;
- }
- else {
- std::cout << "转换失败" << std::endl;
- }
- // ---------------------------------------------------------------------------
- std::getchar();
- }
- catch(...) {
- }
- return 0;
- }
- 在c++Builder中使用boost正则表达式实现的查找double和int类型的字符串,并实现StringToInteger和StringToDouble函数
- 在UltraEdit的查找和替换中使用正则表达式
- 在UltraEdit的查找和替换中使用正则表达式
- 在UltraEdit的查找和替换中使用正则表达式
- Boost和标准库中正则表达式的使用
- 程序实现求int类型和double类型的最大最小值范围
- 【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回
- Qt中QString与int和double类型的转换
- 使用boost库的正则表达式regex实现从一篇文档中找出所有匹配的字符串
- 正则表达式检查IP类型和EMAIL字符串的格式(Javascript实现)
- 实现正则表达式的.和*
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- C和指针之字符串实现my_strrchr(char *str, int ch)的函数
- soj 4392 double类型的使用和二分查找
- 使用boost正则表达式查找所有字符串
- Android中源码Launcher主屏幕程序排列详解【安卓Launcher进化一】
- Android中JSON解析 (包括如何写入SD卡)
- 实现VMware linux虚拟机 与 windows 共享文件——VMware-tools的安装
- Android-->Launcher拖拽事件详解【androidICS4.0--Launcher系列二】
- 把AM中的方法发布为WebService
- 在c++Builder中使用boost正则表达式实现的查找double和int类型的字符串,并实现StringToInteger和StringToDouble函数
- 模拟登录(一次自动调转)
- [C语言]防止头文件和全局变量重复定义
- Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】
- 报错expected specifier-qualifier-list before ‘uint32_t‘
- Maven与Ant比较
- 【原创】详谈内核三步走Inline Hook实现
- 批量bulk insert 原理不明白之处 求解答
- hdu Save the dwarfs 4314