0

我已经为此搜索了多个地方,并在 youtube 上浏览了整个“TheNewBoston”C++ 指南,但还没有找到答案。

我正在编写一个程序来练习我的 c++ 技能,我仍然是菜鸟,但我认为这是可能的,我只是不知道该怎么做。

我正在尝试制作的程序是记录您在健身房训练时为某项运动做了多少次重复。

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

int main()
{
    string biceps = "biceps";
    string triceps = "triceps";
    string quads = "quads";
    string muscleChoice;

    cout << "Welcome to MyPT!" << endl;
    cout << endl;
    cout <<  "What are you going to be training today?" << endl;
    cout << endl;
    cout << "**Biceps** \n\n**Triceps** \n\n**Quads**" << endl;
    cout << endl;
    cin >> muscleChoice;
    if ((muscleChoice == "biceps") || (muscleChoice == "triceps") || (muscleChoice == "quads"))
    {
        cout << "working" << endl;
    }



    return 0;
}

这基本上就是我想要的,并且有效。但显然,如果我有更多的可能性,那可能会变得一团糟。我想要的是看起来像这样的东西。(显然函数不会这么长,只是试图更好地解释它)

cin >> muscleChoice;

if (muscleChoice == oneFunctionThatIncludesAllThoseStrings)
{
    cout << "working"
}

有人知道该怎么做吗?

(请解释你的答案,因为我可能不明白,我是菜鸟)

4

5 回答 5

4

您可以使用一个std::set练习字符串,然后检查输入字符串是否是该集合的成员:

std::set<std::string> exercises{"biceps", "triceps", "quads"};

然后

if (exercises.find(muscleChoice) != exercises.end())
{
  std::cout << "working";
}

如果你想保持一个代表的计数,你可以使用一个std::map 代替:

std::map<std::string, unsigned int> exercises;

if (exercises.find(muscleChoice) != exercises.end())
{
  std::cout << "working";
  exercises[muscleChoice]++; // increase count for this muscle choice
}
于 2013-08-26T11:22:44.777 回答
0

您可能想要做的第一件事是将所有要测试是否相等的字符串放在一个数组中,以及一个循环遍历数组并检查是否相等的函数。

string commands[] = { "bicep", "tricep", "quad" };

然后检查相等性:

bool testForEquality( string s ){
   for( int i=0; i<3; i++ ){
      if( s == commands[i] ) return true;
   }

   return false;
}

至于用法:

cin >> muscleChoice;

if ( testForEquality(muscleChoice) )
{
    cout << "working"
}
于 2013-08-26T11:24:32.163 回答
0

我是这样做的:

#include <iostream>
#include <cstdlib>
#include <string>

#include <algorithm> // find function
#include <vector> // dynamic array to store choices

using namespace std;

int main()
{
    vector<string> accepted_choices;
    accepted_choices.push_back("biceps"); // add a choice
    accepted_choices.push_back("tricep");
    accepted_choices.push_back("quad");

    cout << "Welcome to MyPT!" << endl;
    cout << endl;
    cout <<  "What are you going to be training today?" << endl;
    cout << endl;
    cout << "**Biceps** \n\n**Triceps** \n\n**Quads**" << endl;
    cout << endl;
    cin >> muscleChoice;
    if (find(accepted_choices.begin(), accepted_choices.end(), muscleChoice) != accepted_choices.end()) // find returns container.end() if it failed to find
    {
        cout << "working" << endl;
    }



    return 0;
}
于 2013-08-26T11:25:04.993 回答
0

您想要做的只是使用选项列表并使用 if 语句选择其中一个。一种选择是将不同的选择分配给这样的字符串数组;

string Body_Parts[3] = { "biceps", "triceps", "quads" };

并利用它为您带来好处;

    for(int i=0; i<3; i++) {    
        if(muscleChoice==Body_Parts[i])
            cout<<"working"<<endl; 
    }

上面的一段代码会将你的肌肉选择 int 与所有选择的数组进行比较,并在找到匹配项时打印出你想要的任何内容。

于 2013-08-26T11:32:24.830 回答
0

C++98 解决方案:

string muscles[3] = { "biceps", "triceps", "quads" } ;
vector<string> vec(muscles, muscles+3);
set<string> muscles_set(vec.begin(), vec.end());

if ( muscles_set.count(muscleChoice) )
于 2013-08-26T11:37:24.487 回答