//////////////////////////////////////////////////////////////////////////
// -以下为头文件定义#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;
}
// ---------------------------------------------------------------------------