这项任务使我感到无所适从-感到困惑。 我是数据结构的新手,本周的家庭作业让我迷失了方向,我不知道该向谁寻求帮助。学习语言很容易,但是对数据结构进行编程却非常困难! 我的问题?我不知道如何充实自己创建的功能。 这是供参考的作业:
字符串的签名 是从该字符串派生的整数 串。对于此分配,您将通过以下方式为字符串构建签名: 从零的总和开始,对于每个字符(称为c) 在字符串中,使用
更新总数total = total*2 + static cast<int>(c);
注意:可以按以下方式访问字符串
s
的字符:for (string::size_type index = 0; index <s.length(); ++index) //process char s[index]
创建一个存储字符串集合的容器类。的 类应具有三个公共成员:初始化的构造函数 一个空集合,一个将一个字符串添加到 集合,以及接收数据/字符串值和 返回集合中的数据值之一(字符串/单词) 具体来说,其签名在数值上最接近 参数的签名。注意:该类应不存储签名 所有数据(应使用私有数据根据需要进行计算) 方法)。还提供主要功能和任何其他代码/工具来 完成测试您班级的程序。
充实的功能集应该是什么样?我应该如何开始?我被卡住了!
我走对了吗?如何充实自己的职能以准确反映上述任务?谢谢!
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//c = 0;
//total = total * 2 + static cast<int>(c);
//for (string::size_type index=0; index <s.length() ; ++index) //process char s[index]
class Container
{
public:
Container();
string insert();
string returns();
string a[100];
int size = 0;
private:
int calculateSignature();
};
Container::Container()
{
}
string Container::insert()
{
int size = 0;
while (true)
{
string word;
cout << "Enter a string." << endl;
cin >> word;
if ("xyzzy" == word) break;
a[size] = word;
++size;
}
}
string Container::returns()
{
for (int a = 0; a < 100; size - 1);
}
int Container::calculateSignature()
{
}
int main()
{
return 0;
}
答案 0 :(得分:0)
您可以像在数学课中遇到单词问题时那样解释这种方式:逐字翻译每一行:
创建一个存储字符串集合的容器类。
我在这里使用向量是因为我们不知道要存储多少个字符串。如果需要使用数组,并且知道最大字符串数永远不会超过100,则可以使用问题代码中的数组。就个人而言,从不对我发出很大的警告,因此我将使用向量:
class Container
{
private:
vector<string> strings;
};
该类应该具有...一个构造函数,用于初始化一个空集合
向量不需要初始化,因为它具有自己的构造函数,因此我们在构造函数中不需要任何代码:
class Container
{
private:
vector<string> strings;
public:
Container() {}
};
该类应该具有...一个将一个字符串添加到集合中的插入函数
因此insert函数必须接受要添加的字符串,但无需返回任何内容:
class Container
{
private:
vector<string> strings;
public:
Container() {}
void insert(string parameter) { strings.push_back(parameter); }
};
该类应该具有...和一个函数,该函数接收数据/字符串值并返回集合中的数据值之一(字符串/字)
因此,您的检索函数必须采用字符串,并且还必须返回字符串:
class Container
{
private:
vector<string> strings;
public:
Container() {}
void insert(string parameter) { strings.push_back(parameter); }
string retrieve(string parameter); // definition provided later
};
...该类不应存储所有数据的签名(它应根据需要使用私有方法进行计算)。
因此,我们需要一个私有方法,该方法接受一个字符串并返回一个数字:
class Container
{
private:
vector<string> strings;
public:
Container() {}
void insert(string parameter) { strings.push_back(parameter); }
string retrieve(string parameter); // definition provided later
private:
int calculateSignature(string parameter); // definition provided later
};
现在我们有了类的轮廓,我们需要弄清楚calculateSignature的作用:
...您将从总和为零开始为字符串构建签名
所以我们从零开始,最后需要返回它:
class Container
{
private:
vector<string> strings;
public:
Container() {}
void insert(string parameter) { strings.push_back(parameter); }
string retrieve(string parameter); // definition provided later
private:
int calculateSignature(string parameter)
{
int total = 0;
// process parameter
return total;
}
};
对于字符串中的每个字符(称为c),更新总数...可以按以下方式访问字符串s的字符:
for (string::size_type index = 0; index <s.length(); ++index) // process char s[index]
总的来说,我们要对每个字符进行处理,因此我们需要循环:
class Container
{
private:
vector<string> strings;
public:
Container() {}
void insert(string parameter) { strings.push_back(parameter); }
string retrieve(string parameter); // definition provided later
private:
int calculateSignature(string parameter)
{
int total = 0;
for (string::size_type index = 0; index <parameter.length(); ++index)
// process char parameter[index]
return total;
}
};
对于字符串中的每个字符(称为c),请使用以下内容更新总数:
total = total*2 + static cast<int>(c);
然后我们更新总计:
class Container
{
private:
vector<string> strings;
public:
Container() {}
void insert(string parameter) { strings.push_back(parameter); }
string retrieve(string parameter); // definition provided later
private:
int calculateSignature(string parameter)
{
int total = 0;
for (string::size_type index = 0; index <parameter.length(); ++index)
total = total*2 + static cast<int>(parameter[index]);
return total;
}
};
好吧,现在我们只需要弄清楚检索的作用:
...一个接收数据/字符串值并返回...其签名在数值上最接近参数签名的值的函数
因此,我们将需要计算参数的签名,遍历向量并计算每个单个条目的签名,将它们进行比较并存储最接近的签名的索引,最后从向量中返回该索引。
>我会把它留给你,但这并不难。