检查字符串的长度
Check length of a String
我是C++的初学者。我们正在做一个项目,我们为员工输入名字、姓氏和 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的输入。谁能帮我?
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
}
}
}
此问题的紧凑解决方案:
bool ValidSSN(const std::string& ssn) {
if (ssn.size() != 9) return false;
return ssn.find_first_not_of("0123456789") == ssn.npos;
}
没有简单易行的解决方案来检查字符串中的 9 位数字。
我的建议是两步过程:
- 验证长度是否为 9。
- 验证字符串是否为整数。
注意:else
子句中的代码不适用于"123Apple4"等情况。 感谢@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。 然后,您将检查字符串的内容是否与正则表达式匹配。
相关文章:
- 如何检查一个c++字符串中有多少相同的字符/数字
- 在编译时检查字符串文本的长度
- 检查字符串是否"null" C++
- 检查连续对的字符串C++
- 我应该如何解析和检查字符串?
- 检查字符串是否为整数
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- 如何检查模板类中的变量是否为字符串类型?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 字符串变成链表,然后检查括号余额
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 如何检查字符串中是否有重复的负号?例如 --1
- 如何检查字符串是否正确以将其转换为 int?
- 字符串检查总是返回假的Palidrome
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能
- 是否可以使用字符串检查预处理器定义
- NULL /空字符串检查:CPU开销
- 使用数组和无指针创建回文字符串检查器C++
- 使用constexpr进行基本编译时格式字符串检查