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

そこでやりたいことは、単に選択肢のリストを使用し、if ステートメントを使用してそれらの 1 つを選択することです。オプションは、次のような文字列の配列にさまざまな選択肢を割り当てることです。

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

そして、これを有利に利用してください。

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

上記のコードは、int の MuscleChoice をすべての選択肢の配列と比較し、一致が見つかったときに必要なものを出力します。

于 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 に答える