数据结构:完善我的功能需要帮助

时间:2018-09-03 23:43:52

标签: c++ data-structures

这项任务使我感到无所适从-感到困惑。 我是数据结构的新手,本周的家庭作业让我迷失了方向,我不知道该向谁寻求帮助。学习语言很容易,但是对数据结构进行编程却非常困难! 我的问题?我不知道如何充实自己创建的功能。 这是供参考的作业:

  字符串的

签名 是从该字符串派生的整数   串。对于此分配,您将通过以下方式为字符串构建签名:   从零的总和开始,对于每个字符(称为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;

}

1 个答案:

答案 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;
    }
};

好吧,现在我们只需要弄清楚检索的作用:

  

...一个接收数据/字符串值并返回...其签名在数值上最接近参数签名的值的函数

因此,我们将需要计算参数的签名,遍历向量并计算每个单个条目的签名,将它们进行比较并存储最接近的签名的索引,最后从向量中返回该索引。

>

我会把它留给你,但这并不难。