直接贴出来代码,以供参考:
// -以下为头文件定义#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;
- }