用下划线和空格替换字符串中的所有字母

时间:2016-07-19 16:00:16

标签: c++

正如标题所说,我试图用下划线替换字符串中的每个字母,后跟空格。例如:"你好"将被取代 " _ _ _ _ _"。我可以用空格或仅仅用下划线替换字母,但是我在更换两者时遇到了麻烦。任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:1)

基于regex的解决方案:

#include <iostream>
#include <iterator>
#include <string>
#include <regex>

int main() {

    std::string s = "hello";
    std::regex_replace(std::ostream_iterator<char>(std::cout), s.begin(), s.end(), std::regex("."), "_ ");

    return 0;
}

答案 1 :(得分:0)

这不是最有效的解决方案,但应该很容易理解:

#include <string>
#include <iostream>
int main()
{
    std::string theString = "hello";
    std::string theResult = "";
    for (int count = 0; count < theString.length(); count++)
    {
        theResult += "_ ";
    }
    std::cout << theResult;
    return 0;
}

答案 2 :(得分:-1)

我认为这就是你要找的东西:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string input;
    string output;
    int size_input;

    cin>> input;
    size_input= input.size();

    for(int i=0; i<size_input; i++)
    {
        output+= "_";
        if(i!= size_input-1)
            output+= " ";
    }

    cout<< output<<endl;
}

答案 3 :(得分:-6)

嘲笑你一点。你不能!

我的意思是,如果你有字符串&#34;你好&#34;,&#34;替换&#34;它由&#34; _ _ _ _ _&#34;不只是取代,而且还在扩展。

如果您正在做一些刽子手游戏,请不要替换它,保持源词不变,有5个字符。

同时保留一些vector<bool> visibility;初始化为长度5x false

你想要的地方&#34; _&#34;是单词的显示方法,根据"_"显示每个字母visibility[index]或字符串中的字母,并将下一个字母的位置移动到足以模拟一些足够的空间。这将在以后的游戏过程中导致显示如&#34; h e _ _ o&#34; (注意字母之间也包括空格)。

如果你需要不同的东西,我的建议可能是错的......

但一般情况下,除非你真的想要破坏内存中的原始字符串,否则不要覆盖它,生成新的字符串。那么@NathanOliver的建议是有效的。如果你想在内存中销毁原始字符串,那么问题就在于它存储的位置(char *string = "hello";被编译成只读const段,你不想写在那里)以及如何分配内存,决定你是否可以扩大它以包含2倍以上的字母(&#34; _&#34;对)。

编辑: 在查看OP个人资料后,我发现他很可能真的在做刽子手游戏,所以我的猜测是正确的,我相信我的答案会帮助他从长远来看更多。

关于那个&#34; mock&#34;。我不是那个贬低他的问题的人。但是他已经做出了很好的否定 - 这和我的讽刺性使我成为了这样的开场白。

无论如何,我很乐意听到OP自己的声音,如果他确实发现它具有攻击性,或者他感受到了奇怪的尴尬幽默感,并且从其他答案中得知,我试图关心和帮助。 / p>

所以我可以做一个正确的 facepalm ,如果他受伤的话。仅仅从过度敏感的评论者那里获得乐趣是不公平的:/,我不能满足于此。