试图用单个循环删除和替换字符串。例如:
输入:"the- year">
与我的代码
std::string convert(std::string text) {
std::string val;
auto index{ 0 };
for (auto x : text)
{
if (x != '-')
{
val.push_back(x);
index++;
}
else
{
val.push_back(std::toupper(text[index+1]));
index++;
}
}
return val;
}
call:convert("the-new-year");
预期产出:"theNewYear">
获取结果:"theNnewYyear"//错误的额外字符仍然存在
有使用STL算法的建议吗?
我建议你分两步来做:
首先将破折号后的第一个字母大写。使用普通迭代器或索引for循环:
std::string val = text;
for (std::size_t i = 0; i < val.length(); ++i)
{
if (i > 0 && val[i - 1] == '-')
{
val[i] = std::toupper(val[i]);
}
}
然后使用擦除习惯用法使用std::remove
和字符串erase
函数来删除破折号:
val.erase(std::remove(begin(val), end(val), '-'), end(val));