用连字符替换字符串中的文本

时间:2015-03-16 19:31:16

标签: c++ string getline

我正在尝试编写一个模拟Hangman游戏的程序。

#include <iostream>
#include <string>
#include "assn.h"

using namespace std;

int main(){
     clearScreen();
     cout << "Enter a  word or phrase: ";
     string phrase;
     std::getline(std::cin, phrase);
     cout << endl << "Your phrase: " << phrase << endl;
     cout << endl;
}

目前我可以获取输入字符串并保留空格,但我想创建另一个字符串,其中所有字母都用连字符替换,并保留空格。我已经尝试过了,但却找不到怎么做。

3 个答案:

答案 0 :(得分:3)

您可以使用此函数返回短语字符串的拼写字符串:

std::string replacetohyphen(std::string phrase){
    for(int i=0;i<(int)phrase.length();i++){
    phrase[i]='-';}
    return phrase;}

用法:new_phrase=replacetohyphen(phrase);

如果你想在这个新的连字符串中保留空格,那么for循环中的一个简单的if条件就可以解决这个问题:

std::string replacetohyphen(std::string phrase){
    for(int i=0;i<(int)phrase.length();i++){
    if(phrase[i]!=' ')phrase[i]='-';}
    return phrase;}

答案 1 :(得分:2)

以下是手动完成的示例。我保留了你原来的字符串,以便你可以在他们猜测的时候开始更换字母。我发现在开始时自己做事情然后使用算法来理解幕后发生的事情是很好的。

    #include <iostream>
    #include <string>

    using namespace std;

    int main()

    {
         cout << "Enter a  word or phrase: ";

         string originalPhrase;

         std::getline(std::cin, originalPhrase);

         // Copy the original string
         string newPhrase(originalPhrase);
         int phraseSize = originalPhrase.size();
         for(int i = 0; i < phraseSize; ++i)
         {
            // Replace each character of the string with _
            newPhrase[i] = '_';
         }

         cout << endl << "Your phrase: " << originalPhrase << endl;
         cout << endl << "Your new phrase: " << newPhrase << endl;

         cout << endl;
    }

答案 2 :(得分:2)

以下是使用algorithm的{​​{1}}

的示例
replace_if

输出:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    using namespace std;

    string input{"This is a test"};
    string censored{input};
    replace_if(censored.begin(), censored.end(), ::isalpha, '-');
    cout << censored << std::endl;
}

上面对---- -- - ---- 的调用遍历一个容器(在本例中是一串字符),并用破折号替换字母,保留空格。

Live example