如何从 C++ 中的向量中读取字符串列表

How to read a list of strings from a vector in C++

我的问题的背景是这样的:我正在制作一个基于文本的游戏,它有一个非常基本的库存系统和可重复使用的输入系统。一切都很好,但库存系统有点困难。我尝试创建它的方式是使用矢量。 test/example 代码是这样的:

int main()
{
string item;
vector<string> inv;
cout<<"There is a shotgun and a crowbar. What do you want to take?"<<endl<<"\n>";
getline(cin, item);
cout<<"\nYou decide to take the " << item << endl << "\n";
for(int i = 0; i < inv.size(); i++){
cout << inv.at(i) << endl;
}
cin >> item;
}

我不明白这是什么问题。没有编译器错误。它确实确认了我输入的内容,但在循环期间没有任何反应,它会自动进入我的临时暂停(the "cin >> item;")我想要发生的是获得可以包含空格的行,将其存储在 inv 向量中(这将用作我的库存)并将其作为列表读出。在我看来,for 循环应该像这样:

for(i=0; if i < inventory size (do statement below), then i+1 and restart)
cout << inventory.at(i) 

i 是一个不断增长的数字,它应该一次或另一次代表向量中的所有内容,然后我可以利用它来将向量字符串读入列表...

另外,我对 C++ 和这个称为向量的动态数组的概念还很陌生。因此,我对问这个问题犹豫不决,因为我在网上找不到任何可以回答我问题的东西。我有一种感觉,答案就在眼前……

您的工具名称向量为空,因此循环不执行任何操作。

替换

vector<string> inv;

例如

vector<string> inv = {"shotgun", "crowbar"};

此初始化在 C++11 及更高版本(当前为 C++14)中受支持,但在 C++03 中不受支持,您可以在其中执行例如

template< class Type, int n >
int n_items( Type (&)[n] ) { return n; }

// ...
static const char * const inv_data[] = {"shotgun", "crowbar"};
vector<string> inv( inv_data, inv_data + n_items( inv_data ) );

请注意,不幸的是,截至 C++14,C++ 标准库仍未提供将 a 大写或小写的简单函数 string。您将需要创建此类以支持大写输入。