字符串处理的几个简单函数

#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;

 

 

/*******************************************************
 *     Trim_str
 *              去除某字符
 *
 *      Parameters
 *              string &str     要去除字符的字符串     
 *              char    c       要去除的字符
 *
 *      Return value
 *              >0              去除字符后的字符串长度
 *              =0              字符串为空
 *      For example :
 *              s = "123 45 67 "
 *              Trim_str(s,' ');
 *              s = "1234567"
 *******************************************************/
int Trim_str(string &str , char c)
{
        if (0 == str.length())
                return 0 ;
 
        for(string::iterator iter = str.begin() ; iter != str.end() ; ++iter)
        {
                if(c == (*iter))
                {
                        str.erase(iter);
                        --iter;
                }
        }
 
        return str.length();
}

 

 


/*******************************************************
 *     sep_str
 *              根据字符分隔字符串为两个字符
 *
 *      Parameters
 *              string &str     要分隔的字符
 *              string &s_begin 分隔字符前的字符串
 *              string &s_last  分隔字符后的字符串
 *              char    c       分隔的字符
 *
 *      Return value
 *              =1              分隔成功
 *              =0              字符串为空 或 无法找到分隔字符
 *      For example :
 *              s = "123;4567"
 *              sep_str(s,s_begin,s_last,';');
 *              s_begin = "123"  s_last="4567"
 *******************************************************/
int sep_str(string &str , string &s_begin , string &s_last , char c)
{
        if (0 == str.length())
                return 0 ;
 
        if (-1 == str.find(c))
                return 0 ;
 
        string::size_type c_pos = 0 ;           //字符c在str中的位置
        string::iterator iter = str.begin() ;
 
        while(c != (*iter))
        {
                ++ c_pos ;
                ++ iter;
        }
 
        s_begin = str.substr(0 , c_pos);
        s_last = str.substr(c_pos + 1) ;
 
        return 1 ;
}
 
/*******************************************************
 *     spl_str2map
 *              将字符串分割后,放入map中保存
 *
 *      Parameters
 *              string &str     要分割保存的字符串
 *              map<string , string>& argument  分割后保存的map
 *              char    c       分割字符
 *
 *      Return value
 *              >0              分割保存map成功
 *              =0              字符串为空
 *              =-1             分隔后的字符串中,某字符串无"="
 *      For example :
 *              s = "x=1;y=2;z=3"
 *              spl_str2map(s,':',argument);
 *              argument的map结构中:
 *                      键      值
 *                      x       1
 *                      y       2
 *                      z       3
 *******************************************************/
int spl_str2map(string &str , char c , map<string , string>& argument)
{
        if (0 == str.length())//空字符串
                return 0 ;
 
        if (-1 == str.find(c))// 找不到 c 字符
        {
                string s_begin , s_last ;
                int ret = sep_str(str , s_begin , s_last , '=') ;
                if(1 == ret)
                {
                        argument.insert(valType(s_begin,s_last));
                        return 1 ;
                }
                else
                {
                        return -1;
                }
        }
 
        string::size_type c_pos = 0 ;           //字符c在str中的位置
        string::size_type str_pos = 0 ;         //字符串递增位置
 
        for(string::iterator iter = str.begin() ; iter != str.end() ; ++iter)
        {
                if(c == (*iter))
                {
                        string spl_str = str.substr(c_pos , str_pos - c_pos);
                        c_pos = str_pos + 1 ;
 
                        string s_begin , s_last ;
                        int ret = sep_str(spl_str , s_begin , s_last , '=') ;
                        if(1 == ret)
                        {
                                argument.insert(valType(s_begin,s_last));
                        }
                        else
                        {
                                return -1;
                        }
                }
                        ++ str_pos ;
        }
 
        string end_str = str.substr(c_pos) ;
        if(0 != end_str.length())
        {
                        string s_begin , s_last ;
                        int ret = sep_str(end_str , s_begin , s_last , '=') ;
                        if(1 == ret)
                        {
                                argument.insert(valType(s_begin,s_last));
                        }
                        else
                        {
                                return -1;
                        }
        }
        map<string , string>::const_iterator    map_it = argument.begin();
        while(map_it != argument.end())
        {
                cout << map_it->first << ":" << map_it->second << endl ;
                ++ map_it ;
        }
        return argument.size();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值