对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的一些扩展函数的更多相关文章

  1. 从零开始学Kotlin-扩展函数(10)

    从零开始学Kotlin基础篇系列文章 什么是扩展函数 扩展函数数是指在一个类上增加一种新的行为,我们甚至没有这个类代码的访问权限: Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 ...

  2. 逆波兰法求解数学表达示(C++)

    主要是栈的应用,里面有两个函数deleteSpace(),stringToDouble()在我还有一篇博客其中:对string的一些扩展函数. 本程序仅仅是主要的功能实现,没有差错控制. #inclu ...

  3. golang struct扩展函数参数命名警告

    今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...

  4. 前端学PHP之mysql扩展函数

    × 目录 [1]连接数据库 [2]使用数据库 [3]执行SQL查询[4]操作结果集[5]关闭连接 前面的话 mysql由于其体积小.速度快.总体拥有成本低,尤其是具有开放源码这一特点,许多中小型网站为 ...

  5. 用Kotlin开发Android应用(III):扩展函数和默认值

    这是关于Kotlin的第三篇. 原文标题:Kotlin for Android (III): Extension functions and default values 原文链接:http://an ...

  6. C#ASP.NET 通用扩展函数之 LogicSugar 简单好用

    说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒  , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了. 注意需要引 ...

  7. C#ASP.NET 通用扩展函数之 IsWhat 简单好用

    好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if ( ...

  8. Swift新手教程3-字符串String

    原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.用法和C语言类似. 注意   在Cocoa和Cocoa touch中,Swift的String,和Fo ...

  9. Kotlin的扩展函数:扩展Android框架(KAD 08)

    作者:Antonio Leiva 时间:Jan 11, 2017 原文链接:https://antonioleiva.com/extension-functions-kotlin/ 扩展函数是Kotl ...

随机推荐

  1. js 实现 水仙花数

    水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) <!DOCTYPE html><html ...

  2. Lists and tuples

    zip is a built-in function that takes two or more sequence and ‘zips’ them into a list of tuples, wh ...

  3. 插入记录INSERT(二十五)

    插入记录INSERT 我们先来看第一个操作:INSERT 实际上在mysql当中一共存在着3种不同的insert语句,我们先来看第一种.它的语法结构如下: 一.插入记录 INSERT [INTO] t ...

  4. spring boot整合mail

    1.添加依赖 </dependency> <dependency> <groupId>org.springframework.boot</groupId> ...

  5. java9新特性-13-增强的 Stream API

    1.使用说明 Java 的 Steam API 是java标准库最好的改进之一,让开发者能够快速运算,从而能够有效的利用数据并行计算.Java 8 提供的 Steam 能够利用多核架构实现声明式的数据 ...

  6. JavaScript总结(3)

    第3章 获取用户的输入 <script>10 intA=prompt("请输入第一个数字","");11 intB=prompt("请输入 ...

  7. Hello World基于.net framework中CLR的执行

    static void Main(string[] args) { Console.WriteLine("Hello,World!"); Console.WriteLine(&qu ...

  8. Git 内部原理 - (3) Git 引用 (4)包文件

    Git 引用 我们可以借助类似于 git log 1a410e 这样的命令来浏览完整的提交历史,但为了能遍历那段历史从而找到所有相关对象,你仍须记住 1a410e 是最后一个提交. 我们需要一个文件来 ...

  9. d3 bubble源码分析

    技术 d3.d3.pack.d3.hierarchy 展示 https://bl.ocks.org/xunhanliu/e0688dc2ae9167c4c7fc264c0aedcdd1 关于怎么使用, ...

  10. while循环合理运用-判断成绩脚本

    在平时的工作生活中,难免不了去写一些交互性质的脚本,然而呢往往有些用户偏偏会输入不合规范的输入,为了避免就此退出脚本重新执行,这时候就可以用while去写一个死循环去针对用户的输出啊.哈哈~他输不对, ...