【问题标题】:Replace all characters in a string except for spaces with underscores用下划线替换字符串中除空格外的所有字符
【发布时间】:2015-11-06 04:22:43
【问题描述】:

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

这是一个刽子手任务。

我也没有提供任何代码,因为我不需要任何更改。我只需要语法和逻辑帮助。

【问题讨论】:

  • 为什么会被否决?我不了解这个社区。我有一个合理的问题,但我没有得到任何帮助。为什么?
  • 它被否决了,因为不清楚你在研究这个问题上付出了多少努力。在 SO 上也有无数的家庭作业问题表明零努力,所以这可能是一个原因。无论如何,考虑到疑问,我发布了一个答案。
  • @vsoftco 我理解我的努力中的疑虑,因为这里有大量的家庭作业问题,但我在这里提出问题作为最后的努力,以获得我一直在努力的答案小时。感谢您的体贴。
  • 投反对票的人必须投反对票。这个问题有一个(2,实际上)简短的答案

标签: c++


【解决方案1】:
string str("hang man");
for (auto it = str.begin(); it != str.end(); ++it)
{
    if (*it!=' ')
    {
        *it = '_';
    }
}

【讨论】:

  • 我因此遇到了分段错误。有任何想法吗?我们只是在学习指针,所以我不太擅长调试它们。
  • 鉴于答案取决于 C++11 (auto),不妨使用 C++11 的新 for 循环:for (char& c : str) if (c != ' ') c = '_';。尽管如此,还是很高兴看到任何干净的for 循环方法——对于初学者来说更容易适应许多需求,而不是陷入学习一堆繁琐的声明性标准库函数。
【解决方案2】:

使用 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: error: expected primary-expression before '[' token hangman.cpp:56: error: expected primary-expression before ']' token hangman.cpp:56: error: expected primary-expression before 'char' 这很烦人,我不能很好地格式化。对不起。
  • 确保在编译时支持 C++11,标记 -std=c++11 用于 g++,因为代码使用 C++11 新的 lambda 表达式
  • 哦,我明白了。再次感谢!
  • 我正在使用 putty,它显示“无法识别的命令行选项“-std=c++11”。
【解决方案3】:

这是使用标准库算法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';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多