64,664
社区成员
发帖
与我相关
我的任务
分享
//以 "[My" 和 “/]”为开始和结束;
string _testStr = "今天天气不错[My color=\"FF00FF\" font=\"cs.ttf\" size=\"36\" txt=\"你要和我一起来春游吗\"/],放风筝吗";
/*************************************************
color : 字体颜色
font : 字体名称
size:字体大小
txt:需要进行特殊处理的字符串
************************************************/
struct _s_TEST_STRUCT
{
string color;
string fonts;
float size;
string txt;
void reset()
{
color = "FFFFFF";
fonts = "微软雅黑.ttf"
size = 36;
txt = "";
}
}TestStruct;
vector<TestStruct> _vecMyTest;
void getString(const string& _strTest, vector<TestStruct>& _vecTest )
{
//这里怎么实现
}
aaaa[My color="fffffff" txt="bbbbbbb"/]ccccccccccc[My size="49" txt="dddddd"/]eeeeee
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//以 "[My" 和 “/]”为开始和结束;
string _testStr = "今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"你要和我一起来春游吗\"/],放风筝吗";
/*************************************************
color : 字体颜色
font : 字体名称
size:字体大小
txt:需要进行特殊处理的字符串
************************************************/
struct _s_TEST_STRUCT
{
string color;
string fonts;
float size;
string txt;
void reset()
{
color = "FFFFFF";
fonts = "微软雅黑.ttf";
size = 36;
txt = "";
}
}TestStruct;
void getString(const string& _strTest, struct _s_TEST_STRUCT& _structTest )
{
//功能:将传入的字符串按格式划分后存储到结构体对象中
string::const_iterator p_beg = _strTest.begin();
string::const_iterator p_end;
p_beg = find(p_beg, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
_structTest.color = string(p_beg+1, p_end);
p_beg = find(p_end+1, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
_structTest.fonts = string(p_beg+1, p_end);
p_beg = find(p_end+1, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
_structTest.size = atoi(string(p_beg+1, p_end).c_str());
p_beg = find(p_end+1, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
_structTest.txt = string(p_beg+1, p_end);
}
int main()
{
struct _s_TEST_STRUCT _testStruct;
getString(_testStr, _testStruct);
cout<<_testStruct.color<<endl;
cout<<_testStruct.fonts<<endl;
cout<<_testStruct.size<<endl;
cout<<_testStruct.txt<<endl;
system("pause");
return 0;
}
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
//以 "[My" 和 “/]”为开始和结束;
string _testStr = "今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"窗前明月光\"/],放风筝吗"
"今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"疑是地上霜\"/],放风筝吗"
"今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"举头望明月\"/],放风筝吗"
"今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"低头思故乡\"/],放风筝吗";
/*************************************************
color : 字体颜色
font : 字体名称
size:字体大小
txt:需要进行特殊处理的字符串
************************************************/
typedef struct _s_TEST_STRUCT
{
string color;
string fonts;
float size;
string txt;
void reset()
{
color = "FFFFFF";
fonts = "微软雅黑.ttf";
size = 36;
txt = "";
}
}TestStruct;
string strTable[] = {"My color", "font", "size", "txt"};
TestStruct stringToStruct(string& _str)
{
//功能:提取固定格式的字符串中的字段值,存储到结构体对象中返回
//说明:要求输入的字符串格式为[My color=\"xxxxx\"font=\"xxxx\" size=\"xx\" txt=\"xxxx\"/]
// 字段名为My color、font、size、txt
// 字段可以不全,缺失字段对应的结构体成员变量赋默认值
TestStruct ts; //临时结构体对象
ts.reset(); //初始化
//确定各个字段
string::iterator p_itemBeg;
string::iterator p_itemEnd;
string::iterator p_valueBeg;
string::iterator p_valueEnd;
//划分 color
p_itemBeg = strTable[0].begin();
p_itemEnd = strTable[0].end();
p_valueBeg = search(_str.begin(), _str.end(), p_itemBeg, p_itemEnd);
if(p_valueBeg != _str.end()){//存在该字段
p_valueBeg = find(p_valueBeg, _str.end(), '"');
p_valueEnd = find(p_valueBeg+1, _str.end(), '"');
string temp = string(p_valueBeg, p_valueEnd);
ts.color = temp;
}
//划分 fonts
p_itemBeg = strTable[1].begin();
p_itemEnd = strTable[1].end();
p_valueBeg = search(_str.begin(), _str.end(), p_itemBeg, p_itemEnd);
if(p_valueBeg != _str.end()){//存在该字段
p_valueBeg = find(p_valueBeg, _str.end(), '"');
p_valueEnd = find(p_valueBeg+1, _str.end(), '"');
string temp = string(p_valueBeg, p_valueEnd);
ts.fonts = temp;
}
//划分 size
p_itemBeg = strTable[2].begin();
p_itemEnd = strTable[2].end();
p_valueBeg = search(_str.begin(), _str.end(), p_itemBeg, p_itemEnd);
if(p_valueBeg != _str.end()){//存在该字段
p_valueBeg = find(p_valueBeg, _str.end(), '"');
p_valueEnd = find(p_valueBeg+1, _str.end(), '"');
string temp = string(p_valueBeg+1, p_valueEnd);
ts.size = atoi(temp.c_str());
}
//划分 txt
p_itemBeg = strTable[3].begin();
p_itemEnd = strTable[3].end();
p_valueBeg = search(_str.begin(), _str.end(), p_itemBeg, p_itemEnd);
if(p_valueBeg != _str.end()){//存在该字段
p_valueBeg = find(p_valueBeg, _str.end(), '"');
p_valueEnd = find(p_valueBeg+1, _str.end(), '"');
string temp = string(p_valueBeg, p_valueEnd);
ts.txt = temp;
}
return ts;
}
void getString(const string& _strTest, vector<TestStruct>& _vecTest)
{
//功能:将传入的字符串按格式划分后存储到结构体对象容器中
//标记划分起始点
string strBegin = "[My";
string::const_iterator p_b1 = strBegin.begin();
string::const_iterator p_b2 = strBegin.end();
//标记划分终点
string strEnd = "]";
string::const_iterator p_e1 = strEnd.begin();
string::const_iterator p_e2 = strEnd.end();
string tempStr; //划分后的string
string::const_iterator p_beg = search(_strTest.begin(), _strTest.end(), p_b1, p_b2);
string::const_iterator p_end = search(p_beg, _strTest.end(), p_e1, p_e2);
//循环划分、添加
while(p_end != _strTest.end()){
tempStr = string(p_beg, p_end+1);
_vecTest.push_back(stringToStruct(tempStr));
p_beg = search(p_end, _strTest.end(), p_b1, p_b2);
p_end = search(p_beg, _strTest.end(), p_e1, p_e2);
}
}
int main()
{
//getString(const string& , vector<TestStruct>&) 测试场景
vector<TestStruct> _testStruct;
getString(_testStr, _testStruct);
for(vector<TestStruct>::const_iterator it = _testStruct.begin();
it != _testStruct.end(); ++it){
cout<<it->color<<endl;
cout<<it->fonts<<endl;
cout<<it->size<<endl;
cout<<it->txt<<endl;
}
//system("pause");
return 0;
}
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
//以 "[My" 和 “/]”为开始和结束;
string _testStr = "今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"窗前明月光\"/],放风筝吗"
"今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"疑是地上霜\"/],放风筝吗"
"今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"举头望明月\"/],放风筝吗"
"今天天气不错[My color=\"FF00FF\"font=\"cs.ttf\" size=\"36\" txt=\"低头思故乡\"/],放风筝吗";
/*************************************************
color : 字体颜色
font : 字体名称
size:字体大小
txt:需要进行特殊处理的字符串
************************************************/
typedef struct _s_TEST_STRUCT
{
string color;
string fonts;
float size;
string txt;
void reset()
{
color = "FFFFFF";
fonts = "微软雅黑.ttf";
size = 36;
txt = "";
}
}TestStruct;
void getString(const string& _strTest, vector<TestStruct>& _vecTest)
{
//功能:将传入的字符串按格式划分后存储到结构体对象中
//标记划分起始点
string str = "[My";
string::const_iterator p_b = str.begin();
string::const_iterator p_e = str.end();
TestStruct temp; //临时结构体
string::const_iterator p_beg = find_first_of(_strTest.begin(), _strTest.end(), p_b, p_e);
string::const_iterator p_end;
//循环划分、添加
while(p_beg != _strTest.end()){
//划分 color
p_beg = find(p_beg, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
temp.color = string(p_beg+1, p_end);
//划分 fonts
p_beg = find(p_end+1, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
temp.fonts = string(p_beg+1, p_end);
//划分 size
p_beg = find(p_end+1, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
temp.size = atoi(string(p_beg+1, p_end).c_str());
//划分 txt
p_beg = find(p_end+1, _strTest.end(),'"');
p_end = find(p_beg+1, _strTest.end(), '"');
temp.txt = string(p_beg+1, p_end);
_vecTest.push_back(temp);//加入容器
//更新循环变量,以便判断是否划分完毕
p_beg = find_first_of(p_end+1, _strTest.end(),p_b,p_e);
}
}
int main()
{
//getString(const string& , vector<TestStruct>&) 测试场景
vector<TestStruct> _testStruct;
getString(_testStr, _testStruct);
for(vector<TestStruct>::const_iterator it = _testStruct.begin();
it != _testStruct.end(); ++it){
cout<<it->color<<endl;
cout<<it->fonts<<endl;
cout<<it->size<<endl;
cout<<it->txt<<endl;
}
//system("pause");
return 0;
}