【问题标题】:How to add a char into a string如何将字符添加到字符串中
【发布时间】:2023-04-03 17:00:03
【问题描述】:

所以我正在创建一个刽子手游戏并想将一个字符添加到一个字符串中。我想在gatherguess 字符串中添加一个猜测字符,直到gatherguess 匹配刽子手。随意在我的代码中添加一些有用的提示,这将使我变得更好。另外,如果您还可以给我一些具有动态内存分配的示例代码,那就更好了。

#include <stdio.h>
#include <string.h>
#include <iostream>     // std::cout

#include <stdio.h>
#include <string.h>
#include <iostream>     // std::cout
#include <algorithm>    // std::for_each
#include <vector>
#include <set>
#include <string>
bool isitdone(std::string foo, std::string hang){
    return foo == hang ? true : false ;
}

int main(){
    std::string hangman;
    char guess;
    std::string gatherguess; //Get the letters guessed.
    std::cin >> hangman; //Player enter the word to guess.
    bool checkstatement; // Check to see if game is over.

    for(int i =0; i < 10; ++i) {
        std::cin >> guess; //Individual characters to guess
        std::string doo;
        int wordsin;
        doo = hangman;

        int y;
        if(doo.rfind(guess) != std::string::npos) {
            std::cout << "Right " << guess << " Is in the word"  << std::endl;

            std::cout << std::endl;

            checkstatement = isitdone(gatherguess,doo);// I want to add guess char into gatherguess 
            //then check to see if gatherguess is equal to the word then the game will be complete
            if(checkstatement == true) {
                    return 0;
            }
        } else {
            std::cout << "Wrong" << std::endl;
        }
    }
    return 0;
}

【问题讨论】:

  • 这么多格式化你的代码......
  • Stack Overflow 不是免费的在线代码修复服务。首先展示您的调试工作!考虑在这里询问作为最后的手段,展示你为解决问题所做的所有努力,并清楚地说明你卡在哪里。以minimal reproducible example 开头,否则这里不欢迎您提出问题。

标签: c++ string c++11


【解决方案1】:

首先,你应该用足够的占位符来初始化gatherguess

auto hangman = std::string{};
std::cin >> hangman;

auto gatherguess = std::string{hangman.size(), '_'};

现在您可以简单地覆盖“_”字符。

auto pos = hangman.find(guess)
if(pos != std::string::npos) {
    // ...

    do {
        gatherguess[pos] = guess;   // overwrite
        pos = hangman.find(guess, pos); // find next ocurrence
    } while(pos != std::string::npos)

    // ...
}

【讨论】:

    【解决方案2】:

    我对您的代码进行了一些更改。它包含一些建议作为评论。

    //#include <stdio.h> // Do not include a library if you don not use it, because it makes the performance worse.
    //#include <string> // Do not include a library if you don not use it, because it makes the performance worse.
    #include <iostream>     // std::cout
    //#include <stdio.h> // It is pointless to include a library twice.
    //#include <string.h>
    //#include <iostream>     // std::cout
    //#include <algorithm>    // std::for_each
    //#include <vector> // Do not include a library if you don not use it, because it makes the performance worse.
    //#include <set> // Do not include a library if you don not use it, because it makes the performance worse.
    #include <string>
    
    bool isitdone(const std::string& foo, const std::string& hang){ // Passing argument by const reference makes performance much better.
        return foo == hang ? true : false ; // Indenting makes the code much more readable.
    }
    
    int main(){
        const int N=10; // Store constant number in constant variable, because you can change its' value later easily.
        std::string hangman;
        char guess;
        std::string gatherguess; //Get the letters guessed.
        std::cin >> hangman; //Player enter the word to guess.
        bool checkstatement; // Check to see if game is over.
    
        for(int i =0; i < N; ++i)
        {
            std::cin >> guess; //Individual characters to guess
            std::string doo;
            int wordsin;
            doo = hangman;
            int y;
            if(doo.rfind(guess) != std::string::npos)
            {
    
                std::cout << "Right " << guess << " Is in the word"  << std::endl;
    
                std::cout << std::endl;
    
                checkstatement = isitdone(gatherguess,doo);// I want to add guess char into gatherguess
                //then check to see if gatherguess is equal to the word then the game will be complete
                if(checkstatement == true)
                {
                    return 0;
                }
            } else
            {
                std::cout << "Wrong" << std::endl;
            }
        }
        return 0;
    }
    

    我认为您的程序存在逻辑错误。如果一个单词包含超过 10 个不同的字符会怎样?如果小费是正确的,不要计算。

    您可以通过这种方式将字符添加到字符串中:

    #include <iostream>
    #include <string>
    
    int main(){
        std::string str="123";
        str+='4';
        std::cout<<str<<std::endl;
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 2020-04-15
      • 2010-12-11
      相关资源
      最近更新 更多