在c++Builder中使用boost正则表达式实现的查找double和int类型的字符串,并实现StringToInteger和StringToDouble函数...

//

// -以下为头文件定义#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; } // ---------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值