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);
}

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

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

    1. size_type find_first_of( const basic_string &str, size_type index = 0 ); 查找在字符串中第一个与str中的某个字符 ...

  2. 个人永久性免费-Excel催化剂功能第28波-工作薄瘦身,安全地减少非必要冗余

    Excel催化剂在完善了数据分析场景的插件需求后,决定再补充一些日常绝大多数Excel用户同样可以使用到的小功能,欢迎小白入场,在不违背太多Excel最佳实践的前提下,Excel催化剂乐意为广大Exc ...

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

    开发常常遇到Date.Long.String 三种类型数据须要互转的问题.以此记录. public static void main(String[] args) throws ParseExcept ...

  4. 【转】CString类型互转 int

    CString类型互转 int 原文网址:http://www.cnitblog.com/Hali/archive/2009/06/25/59632.html CString类型的转换成int  将字 ...

  5. Java string和各种格式互转 string转int int转string

    Java string和各种格式互转 string转int int转string 简单收集记录下 其他类型转String String s = String.valueOf( value); // 其 ...

  6. C# enum、int、string三种类型互相转换

    enum.int.string三种类型之间的互转 #代码: public enum Sex { Man=, Woman= } public static void enumConvert() { in ...

  7. JS中String类型转换Date类型 并 计算时间差

    JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...

  8. Swift的字符串String是值类型

    根据<The Swift Programming Language>中文版基于Xcode6.1的文章描述: Swift的 String 类型是值类型.如果创建了新的字符串,那么当其进行常量 ...

  9. EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

    EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) EO理论上 ...

随机推荐

  1. CF刷刷水题找自信 2

    CF 1114A  Got Any Grapes(葡萄)? 题目意思:给三个人分葡萄,三个人对葡萄的颜色有一些要求,问所准备的三种颜色的葡萄能否满足三人的要求. 解题意思:直接按条件判断即可. #in ...

  2. 20181120-10 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 7

    此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2415] 版本控制地址    [https://git.coding.n ...

  3. 第18次Scrum会议(10/30)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/30 17:19~17:38,总计19min.地点:东北师 ...

  4. mysql+linux 忘记密码

    方法一: # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & ...

  5. Codeforces Round #272 (Div. 2) E. Dreamoon and Strings dp

    题目链接: http://www.codeforces.com/contest/476/problem/E E. Dreamoon and Strings time limit per test 1 ...

  6. Web站点性能-宏观手段

    1,增加服务器配置,购买性能更强的服务器,cpu.增加内存.增加硬盘(换更大更好的硬盘): 2,修改优化程序: 1)增加缓存: 2)优化代码,优化sql: 3)分离静态资源和动态页面: 3,对服务承担 ...

  7. java 队列的使用(转载)

    转载声明:http://blog.csdn.net/lzy_lizhiyang/article/details/48311925 先我们要知道使用队列的目的是什么?一般情况下,如果是一些及时消息的处理 ...

  8. Alpha-end

    前言 失心疯病源10 团队代码管理github 个人感悟 肝不动了,肝不动了.明天如果见不到我,不要太想我. 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 熬夜肝代码 代码签入git ...

  9. DEBUG_NEW和THIS_FILE

    C++ 的一个 比较晦涩难懂的特点是你可以重载 new 操作符,并且你甚至可以给它附加参数.通常,操作符 new 只接受拟分配对象的大小:        void* operator new(size ...

  10. 操作系统cmd

    实验一  命令解释程序的编写(两周内) 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS, ...