我一直在寻找答案,但我只能找到replace()函数。这太好了,但我需要将字符串中的所有字符替换为空格之外的分数,而不仅仅是一个特定的字符。替换字符串中除下划线之外的所有字符
这是一个hang子手任务。
此外,我没有提供任何代码,因为我不需要任何更改。我只需要语法和逻辑帮助。与C++标准库算法做的
我一直在寻找答案,但我只能找到replace()函数。这太好了,但我需要将字符串中的所有字符替换为空格之外的分数,而不仅仅是一个特定的字符。替换字符串中除下划线之外的所有字符
这是一个hang子手任务。
此外,我没有提供任何代码,因为我不需要任何更改。我只需要语法和逻辑帮助。与C++标准库算法做的
string str("hang man");
for (auto it = str.begin(); it != str.end(); ++it)
{
if (*it!=' ')
{
*it = '_';
}
}
我从这里得到一个分段错误。有任何想法吗?我们只是在学习指针,所以我不擅长调试它们。 –
此代码的工作原理 - 我在发布之前对其进行了测试 –
无论如何,给出答案取决于C++ 11('auto'),不妨使用C++ 11的新for for循环:for(char&c: str)if(c!='')c ='_';'。尽管如此,很高兴看到任何干净的'for'循环方法 - 让开始的C++程序员更容易适应许多需求,而不是陷入了学习一堆繁琐的声明性标准库函数的困境。 –
简单的例子:
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = " this is a test;?";
std::transform(str.begin(), str.end(), str.begin(),
[](char c){return c != ' ' ? '_' : ' ';});
// this also does it
/* std::for_each(str.begin(), str.end(),
[](char& c){if(c != ' ') c = '_';});
*/
std::cout << str;
}
再次感谢@vsoftco。 –
当我使用这个我得到的错误:hangman.cpp:56:错误:预期初始表达式'['令牌 hangman.cpp:56:错误:预期初始表达式']'令牌 hangman.cpp: 56:错误:期望'char'之前的主表达式这令人讨厌,我无法格式化好。抱歉。 –
确保使用C++ 11支持进行编译,为g ++标记'-std = C++ 11',因为代码使用** lambda表达式**,这是C++ 11的新增功能。 – vsoftco
这里还使用标准库算法std::replace_if
另一种选择。我喜欢这个解决方案,因为算法的名字是有意义的,并且清楚地说明了它的作用。
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = "I like turtles";
std::replace_if(str.begin(), str.end(), [](char ch){ return ch != ' '; }, '_');
std::cout << str << '\n';
}
http://en.cppreference.com/w/cpp/algorithm/transform是一个很好的开始 – vsoftco
为什么这是被压低的投票?我不了解这个社区。我有一个合理的问题,我没有得到任何帮助。为什么? –
@vsoftco谢谢。 –