检查输入的有效性 - Setter 函数
Checking validity of input - Setter function
这是一个大学项目的练习题,目前正在学习面向对象编程,我对此比较陌生。
我有一个 class Publication
,属性为 Headline
和 Text
。
这是 class(头文件)
的代码
#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
的新 class。 Article
是 Publication
的一种类型,因此它继承自 Publication
,但它也有自己的唯一字段,称为 Author
.
这里是Article
class的代码(头文件)
#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;
}
这是我的问题:
在 set_author
方法中,我想检查输入是否有效。据我所知,没有叫123
的人,也没有叫Bob%^!@
的人。有没有办法检查字符串是否包含非字母字符?
首先让我指出几个我发现的问题。
在您的 class 构造函数和设置器中,您不使用点分隔符为成员数据分配新值。
在你有 publication.headline="";
的地方,你可以只做 headline = "";
。这适用于您在自己的 class 中使用会员数据的所有情况,因此它也适用于您的 article
class。
其次,在你的 article
class 中。您为继承设置 .h 文件的方式是正确的;但是,在构造函数的 .cpp 中,您必须将 publication
构造函数扩展到 article
构造函数上,就像这样...
article::article() : publication()
{
....
}
: publication()
是对 super
class 的构造函数的调用,没有它,headline
和 text
数据成员将不会被初始化。
const
变量的常见做法也是以这种风格编写:const <data-type> <variable-name>
,所以如果你有 string const new_author
或任何类似的东西,只需切换到 const string new_author
.
现在,至于按照您所说的方式验证您的输入,您可以使用我想到的两种不同方法。一种是使用 isalpha()
方法,另一种是使用 ASCII
table 来检查每个字符的值。
ASCII Method... simple iterator through each character and check if the values are between 65 and 90 or 97 and 122... (refer to ascii table 寻求帮助)。对于此示例,我将使用名为 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...
}
}
希望对您有所帮助!编程愉快!
这是一个大学项目的练习题,目前正在学习面向对象编程,我对此比较陌生。
我有一个 class Publication
,属性为 Headline
和 Text
。
这是 class(头文件)
#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
的新 class。 Article
是 Publication
的一种类型,因此它继承自 Publication
,但它也有自己的唯一字段,称为 Author
.
这里是Article
class的代码(头文件)
#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;
}
这是我的问题:
在 set_author
方法中,我想检查输入是否有效。据我所知,没有叫123
的人,也没有叫Bob%^!@
的人。有没有办法检查字符串是否包含非字母字符?
首先让我指出几个我发现的问题。
在您的 class 构造函数和设置器中,您不使用点分隔符为成员数据分配新值。
在你有 publication.headline="";
的地方,你可以只做 headline = "";
。这适用于您在自己的 class 中使用会员数据的所有情况,因此它也适用于您的 article
class。
其次,在你的 article
class 中。您为继承设置 .h 文件的方式是正确的;但是,在构造函数的 .cpp 中,您必须将 publication
构造函数扩展到 article
构造函数上,就像这样...
article::article() : publication()
{
....
}
: publication()
是对 super
class 的构造函数的调用,没有它,headline
和 text
数据成员将不会被初始化。
const
变量的常见做法也是以这种风格编写:const <data-type> <variable-name>
,所以如果你有 string const new_author
或任何类似的东西,只需切换到 const string new_author
.
现在,至于按照您所说的方式验证您的输入,您可以使用我想到的两种不同方法。一种是使用 isalpha()
方法,另一种是使用 ASCII
table 来检查每个字符的值。
ASCII Method... simple iterator through each character and check if the values are between 65 and 90 or 97 and 122... (refer to ascii table 寻求帮助)。对于此示例,我将使用名为 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...
}
}
希望对您有所帮助!编程愉快!