c ++解析带格式的字符串
c++ parsing string with format
我正忙于必须解析 .txt 文件的游戏
每行包含这样的格式 [goblin;2;30x1;1-5;20;5]
数值如下:
- 姓名
- 等级
- 攻击(x前成功率,x后单回合攻击次数)
- 伤害(最小和最大可能的伤害)
- 防御(仍然拒绝成功攻击的百分比)
- 马力
我当前的代码是这样的:
std::stringstream sstream(monsterLine);
// Name is until the first comma.
std::getline(sstream, monster.name, ';');
// Then its spaces seperating the values.
sstream >> monster.level;
sstream >> monster.attackPoints;
sstream >> monster.damagePoints;
sstream >> monster.defensePoints;
sstream >> monster.lifePoints;
然而,这只有在我格式化像 goblin;2 30x1 1-5 20 5
这样的字符串时才有效
我怎样才能使它与上述格式一起工作?
具体:
我如何检查当前行是否位于 [...] 内并删除它们。
我如何通过 ;
而不是 (whitespace)
拆分值
继续使用 getline
和 ;
作为分隔符。
>>
运算符无法识别 ;
。它只能使用空格。
getline
可用于字符串的标记化。
if( (monsterLine.length() > 2) &&
(monsterLine[0] == '[') &&
(monsterLine[monsterLine.length() - 1] == ']') )
{
std::string szNewMonsterLine = monsterLine.substr(1, monsterLine.length() - 2);
std::stringstream ss(szNewMonsterLine);
if(getline(ss, monster.name, ';'))
{
//some problem fetching data
}
if(getline(ss, monster.level, ';'))
{
//some problem fetching data
}
if(getline(ss, monster.attackPoints, ';'))
{
//some problem fetching data
}
...
...
if(getline(ss, monster.lifePoints, ';'))
{
//some problem fetching data
}
}
我正忙于必须解析 .txt 文件的游戏
每行包含这样的格式 [goblin;2;30x1;1-5;20;5]
数值如下:
- 姓名
- 等级
- 攻击(x前成功率,x后单回合攻击次数)
- 伤害(最小和最大可能的伤害)
- 防御(仍然拒绝成功攻击的百分比)
- 马力
我当前的代码是这样的:
std::stringstream sstream(monsterLine);
// Name is until the first comma.
std::getline(sstream, monster.name, ';');
// Then its spaces seperating the values.
sstream >> monster.level;
sstream >> monster.attackPoints;
sstream >> monster.damagePoints;
sstream >> monster.defensePoints;
sstream >> monster.lifePoints;
然而,这只有在我格式化像 goblin;2 30x1 1-5 20 5
这样的字符串时才有效
我怎样才能使它与上述格式一起工作?
具体:
我如何检查当前行是否位于 [...] 内并删除它们。
我如何通过 ;
而不是 (whitespace)
继续使用 getline
和 ;
作为分隔符。
>>
运算符无法识别 ;
。它只能使用空格。
getline
可用于字符串的标记化。
if( (monsterLine.length() > 2) &&
(monsterLine[0] == '[') &&
(monsterLine[monsterLine.length() - 1] == ']') )
{
std::string szNewMonsterLine = monsterLine.substr(1, monsterLine.length() - 2);
std::stringstream ss(szNewMonsterLine);
if(getline(ss, monster.name, ';'))
{
//some problem fetching data
}
if(getline(ss, monster.level, ';'))
{
//some problem fetching data
}
if(getline(ss, monster.attackPoints, ';'))
{
//some problem fetching data
}
...
...
if(getline(ss, monster.lifePoints, ';'))
{
//some problem fetching data
}
}