2013-08-26 102 views
0

我已經爲此查找了多個位置,並在youtube上觀看了整個「TheNewBoston」C++指南,並且還沒有找到答案。一個包含多個變量的字符串或函數(C++)

我正在寫一個程序來練習我的C++技能,我仍然是一個noob,但我認爲這是可能的,我只是不知道該怎麼做。

我試圖製作的程序是一個記錄在健身房訓練時爲特定練習做多少代表的程序。

#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" 
} 

沒有任何人知道該怎麼做?

(請說明您的答案,因爲我可能不明白,我是小白)

+0

你是說'的std ::設置'和'。find()'調用? – WhozCraig

+1

是的,謝謝你:) – Nvarano

回答

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 
} 
+0

是的,謝謝你!這是我想要的:) – Nvarano

+0

我需要#include什麼?它表示'set'不是'std'的成員 – Nvarano

+0

@ user2716905對於'std :: map',對於'std :: set'和''是的,''。我添加了參考鏈接,告訴你需要哪些標題。 – juanchopanza

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" 
} 
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; 
} 
0

你想要做什麼只需使用一系列選項並通過使用if選擇其中之一tatement。 一個選項是將不同的選項分配給像這樣的字符串數組;

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

並利用這個優勢;

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

的一段代碼上面會比較muscleChoice的你詮釋到所有選擇的數組,並打印出任何你想要的,當它找到一個匹配。

+0

這也適用謝謝:) – Nvarano

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)) 
相關問題