2015-11-06 74 views
-1

我一直在寻找答案,但我只能找到replace()函数。这太好了,但我需要将字符串中的所有字符替换为空格之外的分数,而不仅仅是一个特定的字符。替换字符串中除下划线之外的所有字符

这是一个hang子手任务。

此外,我没有提供任何代码,因为我不需要任何更改。我只需要语法和逻辑帮助。与C++标准库算法做的

+1

http://en.cppreference.com/w/cpp/algorithm/transform是一个很好的开始 – vsoftco

+0

为什么这是被压低的投票?我不了解这个社区。我有一个合理的问题,我没有得到任何帮助。为什么? –

+0

@vsoftco谢谢。 –

回答

1
string str("hang man"); 
for (auto it = str.begin(); it != str.end(); ++it) 
{ 
    if (*it!=' ') 
    { 
     *it = '_'; 
    } 
} 
+0

我从这里得到一个分段错误。有任何想法吗?我们只是在学习指针,所以我不擅长调试它们。 –

+0

此代码的工作原理 - 我在发布之前对其进行了测试 –

+0

无论如何,给出答案取决于C++ 11('auto'),不妨使用C++ 11的新for for循环:for(char&c: str)if(c!='')c ='_';'。尽管如此,很高兴看到任何干净的'for'循环方法 - 让开始的C++程序员更容易适应许多需求,而不是陷入了学习一堆繁琐的声明性标准库函数的困境。 –

1

简单的例子:

#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; 
} 
+0

再次感谢@vsoftco。 –

+0

当我使用这个我得到的错误:hangman.cpp:56:错误:预期初始表达式'['令牌 hangman.cpp:56:错误:预期初始表达式']'令牌 hangman.cpp: 56:错误:期望'char'之前的主表达式这令人讨厌,我无法格式化好。抱歉。 –

+0

确保使用C++ 11支持进行编译,为g ++标记'-std = C++ 11',因为代码使用** lambda表达式**,这是C++ 11的新增功能。 – vsoftco

1

这里还使用标准库算法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'; 
} 
相关问题