C++ string功能补充(类型互转,分割,合并,瘦身)

int StringUtil::intFromString(string data)
{
    //NOTE atoi是非标准C函数
    return atoi(data.c_str());
}

string StringUtil::stringFromInt(int data)
{
    char tmp[11];
    memset(tmp,0,11);
    sprintf(tmp,"%10d",data);
    return string(tmp);
}

double StringUtil::doubleFromString(string data)
{
    double tmp;
    sscanf(data.c_str(),"%lf",&tmp);
    return tmp;
}

string StringUtil::stringFromDouble(double data)
{
    char tmp[21];
    memset(tmp,0,21);
    sprintf(tmp,"%20.3lf",data);
    return string(tmp);
}

float StringUtil::floatFromString(std::string data)
{
    float tmp;
    sscanf(data.c_str(),"%f",&tmp);
    return tmp;
}

std::string StringUtil::stringFromFloat(float data)
{
    char tmp[21];
    memset(tmp,0,21);
    sprintf(tmp,"%20.3f",data);
    return string(tmp);
}

bool StringUtil::boolFromString(std::string data)
{
    if(data.compare("true") == 0)
        return true;
    else
        return false;
}

std::string StringUtil::stringFromBool(bool data)
{
    if(data)
        return string("true");
    else
        return string("false");
}

vector<std::string> StringUtil::splitStringToArray(std::string source, std::string seperator)
{
    vector<string> result;
    if(!source.empty())
    {
        string::size_type begin = 0;
        string::size_type end = 0;
        unsigned int sepSize = seperator.size();
        while((end = source.find_first_of(seperator,begin))!=string::npos)
        {
            string item = source.substr(begin,end-begin);
            result.push_back(item);
            begin=end + sepSize;
        }
        //last item,注意如果最后是分割符,则最后的元素为空字符串
        if(begin <= source.size())
        {
            string item = source.substr(begin,source.size() - begin);
            result.push_back(item);
        }
    }
    return result;
}

std::string StringUtil::linkArrayToString(vector<std::string> array, std::string seperator)
{
    string result;
    if(array.size() > 0)
    {
        unsigned int limit = array.size() - 1;
        for(unsigned int i=0;i< limit;++i)
        {
            result+=array[i];
            result+=seperator;
        }
        result += array[limit];
    }
    return result;
}

map<std::string, std::string> StringUtil::splitStringToMap(std::string source, std::string primarySep, std::string secondarySep)
{
    vector<string> array = StringUtil::splitStringToArray(source,primarySep);
    vector<string> tmpArray;
    map<string,string> result;
    for(unsigned int i = 0; i< array.size();++i)
    {
        tmpArray = StringUtil::splitStringToArray(array[i],secondarySep);
        if(tmpArray.size() >= 2)
        {
            result[tmpArray[0]] = tmpArray[1];
        }
    }
    return result;
}

std::string StringUtil::linkMapToString(map<std::string, std::string> tmpMap, std::string primarySep, std::string secondarySep)
{
    vector<string> tmpArray;
    string tmpStr;
    map<string,string>::iterator it = tmpMap.begin();
    for(;it!=tmpMap.end();++it)
    {
        tmpStr = it->first+secondarySep+it->second;
        tmpArray.push_back(tmpStr);
    }
    return StringUtil::linkArrayToString(tmpArray,primarySep);
}

std::string StringUtil::trimFront(std::string data)
{
    unsigned int i = 0;
    for(;i<data.size()&&data.at(i)==‘ ‘;++i)
    {
    }
    if(i<data.size())
        return data.substr(i,data.size()-i);
    else
        return string("");
}

std::string StringUtil::trimBack(std::string data)
{
    int i = data.size()-1;
    for(;i>=0&&data.at(i)==‘ ‘;--i)
    {
    }
    if(i>=0)
        return data.substr(0,i+1);
    else
        return string("");
}

std::string StringUtil::trim(std::string data)
{
    string tmp = StringUtil::trimFront(data);
    return StringUtil::trimBack(tmp);
}
时间: 2024-08-29 08:08:45

C++ string功能补充(类型互转,分割,合并,瘦身)的相关文章

C++ string的那些坑,C++ string功能补充(类型互转,分割,合并,瘦身) ,c++ string的内存本质(简单明了的一个测试)

1. size_type find_first_of( const basic_string &str, size_type index = 0 ); 查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置.搜索从index开始,如果没找到就返回string::npos 2. string& replace (size_t pos, size_t len, const string& str); 从当前字符串的pos位置开始,长度为len的段落,替换成成str 3. in

【工具类】Date、Long、String 类型互转

开发经常遇到Date.Long.String 三种类型数据需要互转的问题,以此记录. public static void main(String[] args) throws ParseException { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date1 = new Date(Long.parseLong("1437027902781"));//Lon

【转】CString类型互转 int

CString类型互转 int 原文网址:http://www.cnitblog.com/Hali/archive/2009/06/25/59632.html CString类型的转换成int  将字符转换为整数,可以使用atoi._atoi64或atol. //CString aaa = "16" ; //int int_chage = atoi((lpcstr)aaa) ; 而将数字转换为CString变量,可以使用CString的Format函数.如  CString s;  i

C++ - string类型转换int类型

string类型转换int类型 本文地址: http://blog.csdn.net/caroline_wendy C语言转换形式: ... std::string str; int i = atoi(str.c_str()); ... C++转换形式(C++11): ... std::string str; int i = std::stoi(str); ... 同样, 可以使用 stol(long), stof(float), stod(double) 等. 参考: http://en.cp

C++ String和其他类型互换

在C++中如何实现String和其他类型互换呢?最好的方式是使用stringstream,下面简单介绍下: 1.其他类型转换为String #include <sstream> stringstream sstr; string s1; s1.append("string "); sstr << 12; //sstr >> s1; //这样的结果是把原来string的值冲掉了 s1 += sstr.str(); //这样不会改变原来的值 sstr.c

js中String转Date类型并比较大小

1.比较常用的方法,但繁琐: 主要使用Date的构造方法:Date(int year , int month , int day) Java代码   <script> var str1 = "2009-8-9"; var arr1 = str1.split("-"); var date1 = new Date(arr1[0],parseInt(arr1[1])-1,arr1[2]); var str2 = "2009-8-4"; va

功能:类型修饰符long和unsigned的使用

#include<stdio.h> main() { char a1,b1; unsigned char a2,b2; int x1,y1; long x2,y2; a1=127;    b1=129; a2=127;    b2=129; x1=32767;   y1=32769; x2=32767;   y2=32769; printf("a1=%d,a2=%u,b1=%d,b2=%u\n",a1,a2,b1,b2); printf("x1=%d,x2=%u,

Swift学习笔记(语法篇)-- String与Character类型

一: String概述 不同于Objective-C中的NSString与NSMutableString,在Swift中,存储String类型的数据能否改变,取决于定义数据是var还是let,var是变量,能改变String的长度,增加,修改,删除其中的每一个字符等操作,而let是常量,一旦定义后就不能再修改其内容. Swift的String类型是值类型,如果你创建了一个新的String类型的数据,当它被赋值传递时会进行值拷贝,产生一个副本. 二:Character概述 String其实是作为一

Java中String转换Double类型 Java小数点后留两位

Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.toString()); 太祖元年 Java小数点后留两位 double num1 =11; double num1 =21; String num1 =""; DecimalFormat df = new DecimalFormat(".00");num3 = df.fo