c++,用于赋值的if循环



我需要一些帮助,试图找出一种方法,使一个if语句采取用户输入类别后输入。如果用户在cin语句中输入字符串类别[0],在本例中为"每十亿英里发生致命碰撞的驾驶员数量"。我希望它显示来自worststate[0]数组的第一个句子,在本例中是North Dakota和South Carolina。我需要对每个类别都这样做,以便与列出的状态相匹配,这是按顺序进行的。

#include <iostream>
using namespace std;

string worstState[7] = {
        {"North Dakota and South Carolina"},
        {"Hawaii"},
        {"Montana"},
        {"District of Columbia"},
        {"District of Columbia and Mississippi"},
        {"New Jersey"},
        {"Louisiana"},
};
void displayIntro(){
    cout << "Welcome to the Car Accident Statistic Website" << endl;
    cout << "Take a look at the following categories: " << endl;
}

 string categories[7] = {
        {"Number of drivers involved in fatal collisions per billion miles"},
        {"Percentage of drivers involved in fatal collisions who were speeding"},
        {"Percentage of drivers involved in fatal collisions who were Alcohol-Impaired"},
        {"Percentage of drivers involved in fatal collisions who were not distracted"},
        {"Percentage of drivers involved in fatal collisions who had not been involved in any previous accidents"},
        {"Car Insurance Premiums"},
        {"Losses incurred by insurance companies for collisions per insured driver"},
};

int main () {

string Input;
    displayIntro();
    cout << categories[0] << endl;
    cout << categories[1] << endl;
    cout << categories[2] << endl;
    cout << categories[3] << endl;
    cout << categories[4] << endl;
    cout << categories[5] << endl;
    cout << categories[6] << endl;
    cout << "Enter a category: ";
    cin >> Input;
    if (Input == categories....
    return 0;
}

显然这段代码组织得不是很好,我还会继续改进,但我只是想让用户输入类别字符串,并让状态与类别数组中的特定类别相匹配,所有这些都是基于输入方式的。

想知道处理这种情况的最好方法是什么

您可以使用unordered_map(又名哈希表):

在程序开始时初始化映射,将所有问题映射到它们各自的答案(即categories[i]到worstState[i])。

unordered_map<string, string> questionsToAnswers;
for (size_t i = 0; i < 7; i++) {
    questionsToAnswers[categories[i]] = worstState[i];
}

当用户输入一个字符串时,您可以像这样查找答案:

string s;
cin >> s;
auto itor = questionsToAnsers.find(s);
if (itor != questionsToAnswers.end()) {
    cout << itor->second;
} else {
   // question not found in map
}

如果我理解正确,如果用户在类别[0]中输入,您希望显示worstState[0],如果用户在类别[1]中输入,您希望显示worstState[1],以此类推。现在看起来你的输入是固定的,这意味着你可以使用switch语句,然而,因为有相当多的课程,你想考虑一个for循环可能看起来更干净。比如:

for(int i = 0; i < size(categories); i++){
    if(Input == categories[i]){
        cout << worstState[i] << endl;
    }
}

最新更新