对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>}
}
时间: 2024-10-21 06:33:49

对string的一些扩展函数的相关文章

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

主要是栈的应用,里面有两个函数deleteSpace(),stringToDouble()在我另一篇博客当中:对string的一些扩展函数. 本程序只是基本的功能实现,没有差错控制. #include<iostream> #include<stack> #include<string> #include<map> #include"fstring.h" /* *采用逆波兰表示法求解数学表达示 *1.将输入的中缀表示示转换成后缀表达示 *2

Kotlin学习与实践 (三)fun 函数

通过例子来学习如何高效的在Kotlin中定义使用函数. 1.命名参数.默认参数.顶层函数.扩展函数 * 展示几种创建集合类的方法和扩展的简单操作集合类的方法 fun createCollection() { val set = hashSetOf(1, 12, 26) println("hashSetOf -- > ${set.javaClass}") val list = arrayListOf(12, 24, 66) println("arrayListOf --

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

今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.com/zsy619/gcommon" ) //ChunkFooter 块Footer type ChunkFooter struct { ChunkDataTotalSize int } //NewChunkFooter 创建一个ChunkFooter func NewChunkFooter(chu

Swift新手教程3-字符串String

原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.用法和C语言类似. 注意 在Cocoa和Cocoa touch中,Swift的String,和Foundation中的NSString是兼容的,全部NSString额API都能够调用String类型 字符串常量 1.含转义字符:比如\n,\t等 2.单字节Unicode标量,\xmm 3.双字节Unicode标量,\ummmm 4.四字节Unicode标量,\Ummmmmmmm 这里的m为十六进制数

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

说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒  , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了. 注意需要引用 “SyntacticSugar” 用法: //[Switch] string bookKey = "c#"; //以前写法 string myBook = ""; switch (bookKey) { case "c#": myBook = &q

转载:PHP扩展函数库-文件系统、进程与网络

PHP的扩展函数库十分庞大,官方的非官方的,在这里只记录一些目前比较常用的扩展,对于这一部分,也只是记录其中一些核心的函数,不是一个全面记录.对于详细的扩展函数说明,需要在使用中参考PHP的用户手册.     1 目录操作     dir()  返回一个目录对象     read()  遍历目录对象中的条目 1 <?php 2 $d=dir("./"); 3 4 5 while($item=$d->read()) 6 { 7 echo $item; 8 echo "

整理一些JavaScript时间处理扩展函数

在JavaScript中,时间处理是经常需要用到的.最近想要慢慢建立自己的代码库,整理了几个之前用到的js处理时间的函数,发出来跟大家分享一下,以后的使用中会不断增加和修改代码库. 把字符串转换为日期对象 有时需要把字符串转换为日期对象,但是IE下不支持new Date("2011-04-07")这样实例化日期对象,ff下支持,所以写了一个扩展函数,用来把形如yyyy-mm-dd或者dd/mm/yyyy的字符串转换为日期对象.代码如下:兰西县璩家摄影 /* 函数:把字符串转换为日期对象

前端学PHP之mysql扩展函数

× 目录 [1]连接数据库 [2]使用数据库 [3]执行SQL查询[4]操作结果集[5]关闭连接 前面的话 mysql由于其体积小.速度快.总体拥有成本低,尤其是具有开放源码这一特点,许多中小型网站为了减低网站总体拥有成本而选择了mysql作为网站数据库.而使用mysql数据库管理系统与php脚本语言相结合的数据库系统解决方案,正被越来越多的网站所采用,其中以LAMP(linux+apche+mysql+php)模式 最为流行 PHP有标准的函数用来操作数据库,mysqli是PHP5中新加的,是

Swift入门教程3-字符串String

原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.使用方法和C语言类似. 注意 在Cocoa和Cocoa touch中,Swift的String,和Foundation中的NSString是兼容的,所有NSString额API都可以调用String类型 字符串常量 1.含转义字符:例如\n,\t等 2.单字节Unicode标量,\xmm 3.双字节Unicode标量,\ummmm 4.四字节Unicode标量,\Ummmmmmmm 这里的m为十六进