对string的一些扩展函数
对string作了一些扩展,包含string转化为int、string转化为double、string转化为bool、打印系统当前时间。但没有解决数据溢出的问题,请大神帮忙解决!
//头文件
/*part of interface about string;
*it follow the function simply ,no complex situation exist;
*so it should be modify before you use it;
*overflow problem is need to be solved;
*/
#ifndef FSTRING
#define FSTRING #include <string>
#include <vector>
#include <iostream> using namespace std; //declare
extern bool stringToBoolValid;
extern bool stringToIntValid;
extern bool stringToDoubleValid; //split the string with delim,default delim is ' '
bool split(vector<string>& ,const string str,const char delim=' ');
//convert string to int
int stringToInt(const string& );
//convert string to double
double stringToDouble(const string& );
//convert string to bool
bool stringToBool(const string& );
//print current time of this system
bool printSystemTime(ostream& output=cout);
//delete space
void deleteSpace(string& str);
#endif //FSTRING
//源文件
#include "fstring.h"
#include <time.h>
#include <math.h> //definition
bool stringToBoolValid=true;
bool stringToIntValid=true;
bool stringToDoubleValid=true; //切割字符串函数
bool split(vector<string>& vecStr,const string str,const char delim)
{//假设所须要要转化的字符串为空,则直接返回
if(str.empty())
return false;
size_t i=0;
string subStr;
subStr.clear();
while(i<str.size())
{
if(str[i]==delim)
{
if(!subStr.empty())
vecStr.push_back(subStr);
subStr.clear();
}
else
{
subStr+=str[i];
}
++i;
}
vecStr.push_back(subStr);
return true;
} int stringToInt(const string& str)//转化成整数
{
if(str.empty())
{
stringToIntValid=false;
return 0;
}
int returnInt(0);
bool flagPlusMinus=0;
size_t i=0;
if(str[0]=='+')
{
i++;
}
else if(str[0]=='-')
{
i++;
flagPlusMinus=1;
}
for(;i<str.size();++i)
{
if(str[i]<'0' || str[i]>'9')
{
stringToIntValid=false;
returnInt=0;
return returnInt;
}
returnInt=returnInt*10+str[i]-'0';
}//假设仅仅有一个正号或负号,输出也是零 if(flagPlusMinus)
returnInt*=(-1);
return returnInt;
} double stringToDouble(const string& str)//转化成浮点数
{
if(str.empty())
{
stringToDoubleValid=false;
return 0;
}
double returnDouble(0);
size_t i=0;
size_t flag=2000;
int NumPoint=0;//小数点出现次数
int decimalNum(0);
bool flagPlusMinus=0;
if(str[0]=='+')
{
i++;
}
else if(str[0]=='-')
{
i++;
flagPlusMinus=1;
}
for(;i<str.size();++i)
{
if(str[i]=='.')
{
if(NumPoint>1)
{
stringToDoubleValid=true;
returnDouble=0;
return returnDouble;
}
flag=i;
continue;
}
else if(str[i]<'0' || str[i]>'9')
{
stringToDoubleValid=true;
returnDouble=0;
return returnDouble;
} if(i>flag)
{
decimalNum++;
}
returnDouble=returnDouble*10+str[i]-'0';
}
for(int t=0;t<decimalNum;++t)
returnDouble/=10; if(flagPlusMinus)
returnDouble*=(-1);
return returnDouble;
} bool stringToBool(const string& str)//String to Bool
{
if(str.size()>1 || str.empty())
{
stringToBoolValid=false;
return 0;
}
if(str=="1")
return 1;
else
return 0;
} bool printSystemTime(ostream& output)
{
time_t currentTime=time(0);
struct tm* currentTimeStruct=localtime(¤tTime);
output<<"系统当前时间:"<<1900+currentTimeStruct->tm_year<<"."<<
currentTimeStruct->tm_mon+1<<"."<<currentTimeStruct->tm_mday<<" "<<
currentTimeStruct->tm_hour<<":"<<currentTimeStruct->tm_min<<":"<<
currentTimeStruct->tm_sec<<endl;
return true;
}
void deleteSpace(string& str)
{//删除表达式中的空格
<span style="white-space:pre"> </span>string::iterator iter = str.begin();
<span style="white-space:pre"> </span>while (iter != str.end())
<span style="white-space:pre"> </span>{//注意删除后,迭代器指向被删除元素的下一个元素
<span style="white-space:pre"> </span>if (*iter == ' ')
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>iter = str.erase(iter);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>iter++;
<span style="white-space:pre"> </span>}
}
对string的一些扩展函数的更多相关文章
- 从零开始学Kotlin-扩展函数(10)
从零开始学Kotlin基础篇系列文章 什么是扩展函数 扩展函数数是指在一个类上增加一种新的行为,我们甚至没有这个类代码的访问权限: Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 ...
- 逆波兰法求解数学表达示(C++)
主要是栈的应用,里面有两个函数deleteSpace(),stringToDouble()在我还有一篇博客其中:对string的一些扩展函数. 本程序仅仅是主要的功能实现,没有差错控制. #inclu ...
- golang struct扩展函数参数命名警告
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...
- 前端学PHP之mysql扩展函数
× 目录 [1]连接数据库 [2]使用数据库 [3]执行SQL查询[4]操作结果集[5]关闭连接 前面的话 mysql由于其体积小.速度快.总体拥有成本低,尤其是具有开放源码这一特点,许多中小型网站为 ...
- 用Kotlin开发Android应用(III):扩展函数和默认值
这是关于Kotlin的第三篇. 原文标题:Kotlin for Android (III): Extension functions and default values 原文链接:http://an ...
- C#ASP.NET 通用扩展函数之 LogicSugar 简单好用
说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒 , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了. 注意需要引 ...
- C#ASP.NET 通用扩展函数之 IsWhat 简单好用
好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if ( ...
- Swift新手教程3-字符串String
原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.用法和C语言类似. 注意 在Cocoa和Cocoa touch中,Swift的String,和Fo ...
- Kotlin的扩展函数:扩展Android框架(KAD 08)
作者:Antonio Leiva 时间:Jan 11, 2017 原文链接:https://antonioleiva.com/extension-functions-kotlin/ 扩展函数是Kotl ...
随机推荐
- m_Orchestrate learning system---二十四、thinkphp里面的ajax如何使用
m_Orchestrate learning system---二十四.thinkphp里面的ajax如何使用 一.总结 一句话总结:其实ajax非常简单:前台要做的事情就是发送ajax请求过来,后台 ...
- NET下Assembly的加载过程
NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没 ...
- QuerySet和对象的例子 个人记录
import osif __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE&quo ...
- 12.C语言控制窗口
void main() { //创建一个窗口编号变量,寻找QQ的窗口 HWND win = FindWindowA("TXGuiFoundation", "QQ" ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- [SCOI2008]着色方案 递推 记忆化搜索
我们发现 $c_{i}$ 和 $k$ 的规模非常小我们还发现每种颜色的位置是不必知道的,只要这种颜色和相邻的颜色种类不同即可.定义状态 $f[a][b][c][d][e][last]$,代表有 $a$ ...
- CMDB学习之六 --客户端请求测试,服务端api优化
客户端使用agent 请求测试,agent使用的POST 请求,使用requests模块 本地采集,汇报服务端 #!/usr/bin/env python # -*- coding:utf-8 -*- ...
- [USACO5.4]奶牛的电信Telecowmunication(网络流)
P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...
- rhcs clustat
http://www.cnblogs.com/jyzhao/p/4775942.html https://access.redhat.com/documentation/zh-CN/Red_Hat_E ...
- vmware下ubuntu的网络配置
捣弄了vmnet0和vmnet8连接后,ubuntu上不了网了,今天突然解决了这个问题. 打开vmware后,点编辑-->虚拟网络编辑器 这里我使用的是NAT模式,所以要修改vmnet8 点vm ...