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