【发布时间】:2017-05-29 09:36:53
【问题描述】:
我想将字符串KeyData(存在的是<eg2keydata> 属性)中的数据转换为*。但它总是采用字符串msg 中keyData 的第一个实例。每次我想转换时如何获取特定实例?我是新手,我无法调试它。我不确定 for 循环。任何人请帮我找出错误。谢谢!
const std::string& msg = "<PolicyAction><ManualKeyPolicyAction><TransformData SPI=\"1219546177\"><eg1KeyData Protocol=\"abc\" KeyLength=\"64\" KeyData=\"d789c\"></eg1KeyData><eg2KeyData Protocol=\"hm\" KeyLength=\"64\" KeyData=\"4328a036abfcf5e9\"></eg2KeyData><Tunne<PolicyAction><ManualKeyPolicyAction><TransformData SPI=\"1219546177\"><eg1KeyData Protocol=\"aes-cbc\" KeyLength=\"64\" KeyData=\"d789c\"></eg1KeyData><eg2KeyData Protocol=\"hmac-sha1-96\" KeyLength=\"64\" KeyData=\"4328a03\"></eg2KeyData><SaltData ";
std::size_t search1 = msg.find("<eg2KeyData");
const std::string from1 = "KeyData=\"";
const std::string to1 = "\"></eg2KeyData>";
std::size_t endpos1 = msg.find(to1);
std::string s = msg;
std::size_t l1 = 0;
if (msg.find("<eg2KeyData") != std::string::npos)
{
l1 = msg.find("KeyData=\"",search1);
if (l1 != 0)
{
std::size_t r1 = endpos1 - l1 - from1.length();
s.replace(l1 + from1.length(), r1, r1, '*');
}
}
std::cout << s;
【问题讨论】:
标签: c++