如何在C ++中更好地将int更改为字符串或更好..如何创建转换函数?

时间:2015-09-26 20:48:38

标签: c++ c++11

我要做的是将int值转换为字符串,以便输出正常工作。我遇到的问题是显然给了我一条错误信息,因为我无法将字符串分配给整数值。所以我需要的帮助是如何创建一个专门将它们转换为字符串并将它们返回到我的print_result函数的函数?谢谢!

account getBalance

2 个答案:

答案 0 :(得分:1)

你有一个int。您需要将整数转换为特定字符串,"映射"字符串到整数。您可以通过创建临时字符串,将选择字符串分配给临时字符串然后显示临时字符串来解决此问题。

string player1choice;
if(p1 == 1)
    player1choice = "rock";
else if(p1 == 2)
    player1choice = "paper";
else
    player1choice = "scissors";

但这有点慢。

相反,请尝试:

static std::string choices[] = 
{
    "Rock",
    "Paper",
    "Scissors"
};

然后,您可以在需要字符串的任何地方使用choices[p1-1]。例如,

cout << p1 << " = " << choices[p1-1];

警告:确保你永远不会传递任何东西,除了1,2或3,否则你将从阵列的边界中徘徊。对于玩家的选择,Look into using an enum代替int。这样编译器就可以更容易地捕获错误。

enum choicesenum
{
    ROCK = 1,
    PAPER = 2,
    SCISSORS = 3
};

现在不是写1代表摇滚,你可以写ROCK。是的,你输入了更多的字符,但它更容易阅读:

int strategy1(int player, 
              choicesenum previous_result, 
              choicesenum previous_play, 
              choicesenum opponent_previous_play){

    if(previous_play == ROCK)
        previous_play = PAPER;
    else if(previous_play == PAPER)
        previous_play = SCISSORS;
    else if(previous_play == SCISSORS)
        previous_play = ROCK;
    return previous_play;
}

如果您尝试使用不在枚举中的数字,那么它很容易被捕获:

strategy1(1, ROCK, PAPER, HAND_GRENADE); // compiler rejects this 
strategy1(1, ROCK, PAPER, 4); // compiler can warn you 

同样,4在视觉上比在旧案例中更突出:

strategy1(1, 2, 3, 4);

现在我想起来了

enum choicesenum
{
    ROCK = 0,
    PAPER = 1,
    SCISSORS = 2
};

在访问数组时不需要-1。

cout << p1 << " = " << choices[p1];
cout << choices[ROCK]

答案 1 :(得分:0)

您不能对字符串和整数使用相同的变量。这是一个可能的解决方案:

void print_result(int round, int p1, int p2, int winner){
    std::string play1, play2, win;
    if(p1 == 1)
        play1 = "rock";
    else if(p1 == 2)
        play1 = "paper";
    else
        play1 = "scissors";

    if(p2 == 1)
        play2 = "rock";
    else if(p2 == 2)
        play2 = "paper";
    else
        play2 = "scissors";

    if(winner == 0)
        win = "tie";
    else if(winner == 1)
        win = "p1";
    else
        win = "p2";

    cout << "Round " << round << ":"
         << " p1=" << play1 << " vs p2=" << play2 << ": "
         << win << endl;
}

当然,你应该重构它。您可以使用从整数中查找名称的函数;如果它使用switch语句而不是一系列if s,它可能会更清楚。或者您可以使用std::vector或名称。

实际上,你应该使用enum而不是魔术整数。