如何解决创建一个基于字符串的Class数组
我创建了一个名为“字母”的类:
class Letter
{
char letter{};
bool guessed{ false };
public:
void setLetter(std::string);
};
,我想创建一个数组“ Letter”。数组的大小应为用户输入的字符串的大小,并且如果可能,字符串的每个字母应存储在letter对象的1个元素中。 我尝试了以下方法:
std::string word;
Letter test[] = word;
"initialization with {...} expected for aggregate object"
std::string word;
Letter test[word.length()]; // and then iterate through each element of the string
"expression must have a constant value"
编辑: 解决了
std::string word;
std::vector<Letter> test;
for (int i = 0; i < word.length(); i++)
{
test[i].setLetter(word[i]);
}
解决方法
在现代C ++中,考虑动态数组时应首先使用的工具是std::vector
。在这里,您将使用std::vector<Letter>
。在这种情况下,您可以编写std::vector<Letter> test(word.length());
来创建容纳word.length()
类Letter
的默认构造实例的容器。
std::vector
的行为基本上像一个数组。您可以使用operator[]
以相同的方式访问元素。例如,test[1]
访问第二个元素,而不论test
是Letter[]
数组还是std::vector<Letter>
。 here中列出了它的其他功能,您应该熟悉一下。
如果数组的大小不是动态的(在编译时是已知的),仍然最好使用std::array
。 C样式数组在现代C ++中几乎没有用例,因此应避免使用新的,更安全的替代方法。
正如已经指出的那样,我还将对动态尺寸使用矢量。我认为艰巨的任务是将字符串转换为字母数组。 Letter类应具有一个构造函数,该构造函数接受一个char并将其存储。比您可以做这样的事情:
std::vector<Letters> myVector;
for( char current : string )
{
myVector.emplace_back( current );
}
,
您可以修改程序以使用std::vector
,这将是更可取的选择,因为它更加灵活且易于使用。您可以做这样的事情-
class Letter
{
char letter{};
bool guessed{ false };
public:
void setLetter(char c){
letter= c;
};
char getLetter(){
return letter;
};
};
int main()
{
int user_input;
char tmp;
std::cin>>user_input;
std::vector<Letter> test(user_input); // this will create an array which can hold user_input number of objects of given type - Letter
std::cout<<"enter letters :\n";
for(int i=0;i<user_input;i++){
std::cin>>tmp;
test[i].setLetter(tmp); // read input letter into each element(which is object of Letter)
}
for(int i=0;i<user_input;i++){
std::cout<<test[i].getLetter(); // output the read letter
}
return 0;
}
输入:
4
abcd
输出:
enter letters :
abcd
-
在这里,您使用Letter的向量,其中我只是将输入读取到向量的每个元素中(其中每个元素将是
Letter
类的对象),然后我仅输出读取值。您可以修改以上程序以适合您的需求。 -
我所做的另一项更改是
setLetter
接受的参数。由于它正在设置类letter
的对象的Letter
变量,因此它应该采用字符作为参数,然后将字符设置为字母的值。我刚刚添加了getLetter
,它只返回要打印的字母。 -
如果不想使用向量,则可以使用声明语法如-
的数组Letter* test = new Letter[user_input];
但是,在C ++中,向量是首选的处理方式,应避免使用数组,因为向量类似于具有增加的功能和灵活性的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。