我是C ++的初学者。我们正在做一个项目,我们为employee输入firstName,lastName和SSN。我在这里做了什么:
#include <iostream>
#include <stdexcept>
#include "Employee.h"
using namespace std;
Employee::Employee(const string &first, const string &last, const string &ssn)
{
firstName = first;
lastName = last;
SSN = ssn;
}
void Employee::setFirstName(const string &first)
{
firstName = first;
}
string Employee::getFirstName() const
{
return firstName;
}
void Employee::setLastName(const string &last)
{
lastName = last;
}
string Employee::getLastName() const
{
return lastName;
}
void Employee::setSSN(const string &ssn)
{
if (ssn.length() == 9)
{
SSN = ssn;
}
else
{
cout << "Please enter SSN again: " << endl;
}
}
string Employee::getSSN() const
{
return SSN;
}
void Employee::print() const
{
cout << "Employee: " << getFirstName() << ' ' << getLastName()
<< "\nSocial Security Number: " << getSSN();
}
我的导师希望我们检查SSN的长度(最简单的方法)以确保它是9位数,如果它或多或少,请让用户再次输入。我不知道如何验证SSN的输入。有人可以帮帮我吗?
答案 0 :(得分:2)
std :: string :: length()是用于查找长度的函数,std :: string :: empty()用于检查天气字符串是否为空。
if(SSN.length() < 9 && !SSN.empty())
{
//Need C++11 and above for this kind for loop
for(auto &x: SSN)
{
if(std::isdigit(x))
{
//valid SSN
}
}
}
答案 1 :(得分:2)
解决此问题的紧凑解决方案:
bool ValidSSN(const std::string& ssn) {
if (ssn.size() != 9) return false;
return ssn.find_first_not_of("0123456789") == ssn.npos;
}
答案 2 :(得分:0)
检查9位数的字符串没有简单易行的解决方案。
我的建议分为两个步骤:
注意:else
子句中的代码不适用于&#34; 123Apple4&#34;等情况。感谢@Steephen的启蒙。让答案中的代码与评论同步。
在代码中,这将是:
bool is_valid = true;
if (ssn.length() != 9)
{
is_valid = false;
}
else
{
std::istringstream ssn_stream;
ssn_stream.str(ssn);
unsigned int value;
if (!(ssn_stream >> value))
{
is_valid = false;
}
}
另一种选择是使用循环:
if (ssn.length() != 9)
{
is_valid = false;
}
else
{
is_valid = true;
for (unsigned int i = 0U; i < 9; ++i)
{
if (!isdigit(ssn[i]))
{
is_valid = false;
break;
}
}
}
编辑1:正则表达式
如果编译器支持C ++正则表达式,则可以使用正则表达式来定义SSN。然后,您将检查字符串的内容是否与正则表达式匹配。