到目前为止,我正在努力让我的程序找到用户输入提供的债券和元素数量。我认为在许多不同的字符串(元素的名称)中定义相同变量(键)的最简单方法是创建结构并将元素定义为该结构的成员:
#include <iostream>
#include <string>
using namespace std;
struct element {
int bonds;
} Hydrogen, Helium, Lithium, Beryllium, Boron, Carbon, Nitrogen, Oxygen;
int Hydrogen.bonds=1;
int main()
{
string x;
int ans;
cout<<"Enter an element to find the amount of bonds it can have.";
cin>>x;
cout<<x" has "x.bonds" bonds.";
return 0;
};
然后,程序返回1并显示错误:
expected initializer before ‘.’ token
int Hydrogen.bonds=1;
和
‘std::string’ has no member named ‘bonds’
我正在编写这个程序,因为我学习了C ++,但是我无法找到更简单的解决方案。我试图基本列出元素,然后定义它们的键数(例如,Hydrogen.bonds = 1; Carbon.bonds = 4; Nitrogen.bonds = 3;)。
有更好的方法吗?
答案 0 :(得分:1)
由于两行无效
,您的程序无法编译int Hydrogen.bonds=1;
这不起作用,因为从int
开始编译器需要一个新变量;但是,您提供现有的,因此它会中止。您应该使用构造函数或将Hydrogen.bonds = 1
添加到main。
第二个麻烦的线
cout<<x" has "x.bonds" bonds.";
这一问题导致问题,因为您错过了<<
。不幸的是,x是一个字符串,并且不会引用你想要它的元素。相反,它只会打印输入。
您要做的是使用查找表。我建议调查std::map
。首先,您要设置其成员。 (例如:table[element_string] = element_properties
)然后您可以使用table[element_string]
轻松引用它,它将返回您设置的任何内容。
std::map
的参考资料
cplusplus - http://www.cplusplus.com/reference/map/map/?kw=map
答案 1 :(得分:0)
是的,还有更好的方法。
您实际上是在元素和债券数量之间创建一个查找表。我首先要做的就是这样做(std :: map将是一个简单的开始)。您只需要将其填充为静态或main()函数的顶部。
下一个问题是输出。确保在正确的位置有足够的操作符(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
我在移动设备上,并不能真正为您编写解决方案,但这就是我将如何处理您的初始问题描述。