检查字符串的长度

时间:2015-04-16 23:51:54

标签: c++ string string-length

我是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的输入。有人可以帮帮我吗?

3 个答案:

答案 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位数的字符串没有简单易行的解决方案。

我的建议分为两个步骤:

  • 验证长度为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。然后,您将检查字符串的内容是否与正则表达式匹配。