这是一个大学项目的练习,目前正在研究面向对象的程序设计,对此我还比较陌生。

我有一个具有属性PublicationHeadline的类Text
这是该类的代码(头文件)

#include <iostream>
#include <string>

using namespace std;
using std::string;

class publication
{
    private:
        string headline,text;
    public:
        publication(); //constructor

        void set_headline(string const new_headline);
        void set_text(string const new_text);

        string get_headline();
        string get_text();

        void print();
}


这就是实现(.cpp文件)

#include <iostream>
#include <string>
#include "publication.h"

using namespace std;
using std::string;

publication::publication()
{
    publication.headline="";
    publication.text="";
}

void publication::set_headline(string const new_headline)
{
    publication.headline=new_headline; //any input is valid
}

void publication::set_text(string const new_text)
{
    publication.text=new_text; //any input is valid
}

string publication::get_headline()
{
    return publication.headline;
}

string publication::get_text()
{
    return publication.text;
}


到目前为止,我没有看到任何问题,如果我错了,请纠正我。

这是我的问题:

我需要定义一个名为Article的新类。 ArticlePublication的一种,因此它是从Author继承的,但它也有一个自己的唯一字段,称为Article

这是set_author类的代码(头文件)

#include <iostream>
#include <string>
#include "publication.h"

using namespace std;
using std::string;

class article: public publication
{
    private:
        string author;
    public:
        article();

        void set_author(string const new_author);

        string get_author();
}


这就是实现(.cpp文件)

#include <iostream>
#include <string>
#include "article.h"

using namespace std;
using std::string;

article::article()
{
    article.author="";
    article.set_headline("");
    article.set_text("");
}

void article::set_author(string const new_author)
{
    article.author=new_author;
}

string article::get_author()
{
    return article.author;
}


这是我的问题:

123方法中,我要检查输入是否有效。据我所知,没有一个叫Bob%^!@的人或一个叫的人。有没有一种方法可以检查字符串是否包含非字母的字符?

最佳答案

首先,我要指出一些我发现的问题。

在类的构造函数和设置器中,不要使用点分隔符将新值分配给成员数据。

如果您有publication.headline="";,则只需执行headline = "";。这适用于您在其自己的类中使用成员数据的所有情况,因此同样适用于您的article类。

其次,在您的article类中。您设置.h文件进行继承的方式是正确的;但是,在构造函数的.cpp中,您必须像下面那样将publication构造函数扩展到article构造函数上。

article::article() : publication()
{
    ....
}


: publication()是对super类的构造函数的调用,没有它,将不会初始化headlinetext数据成员。

const变量以这种样式编写也是一种常见的做法:const <data-type> <variable-name>,因此如果您具有string const new_author或类似的任何内容,只需切换到const string new_author

现在,关于以您正在谈论的方式验证输入,您可以使用两种我知道的方法。一种使用isalpha()方法,另一种使用ASCII表检查每个字符的值。

ASCII方法...通过每个字符的简单迭代器,并检查值是否介于65和90或97和122 ...之间(请参阅ascii表以获取帮助)。在此示例中,我将使用名为name的变量作为输入字符串变量。

for (int i = 0; i < strlen(name); i++)
{
    if ((int(name[i]) >= 65 && int(name[i]) <= 90)
         || (int(name[i]) >= 97 && int(name[i]) <= 122))
    {
        ...the character is A-Z or a-z...
    }
}


功能方法...

for (int i = 0; i < strlen(name); i++)
{
    if (!(isalpha(name[i])))
    {
        ...the character is only A-Z or a-z...
    }
}


希望对您有所帮助!编程愉快!

关于c++ - 检查输入的有效性-设定器功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32323519/

10-14 12:50