如果String的开头是inc spec

时间:2013-01-14 02:47:18

标签: c++ if-statement

我正在尝试编写一个检查15-16位输入的程序,看看它们属于哪个银行。我不熟悉我正在编写的语言(c ++),并且想要一些指针。我知道你不能在没有其余代码的情况下进行复制和粘贴,但是要发布所有代码都是很长的。我只需要对一些事情进行一些调整。

现在我有程序检查输入的长度以及字符串的前两个值是什么。我想知道现在有没有比现在更简单的方法了。

if(cLen==15 && c[0]== 3 && c[1]==4)

if(cLen==15 && c[0]== 3 && c[1]==7)

因为我需要的是找到前两个nums为34或37的字符串

其次我需要检查字符串是否具有51到55的第一个值

最后我需要检查字符串是否在开头包含6011。

string validatebankcc(string c, int cLen, bool& ccOK) {
    string bankcc;
    if(cLen==15 && c[0]== 3 && c[1]==4)
        bankcc = "AmericanExpress";
    if(cLen==15 && c[0]== 3 && c[1]==7)
        bankcc = "AmericanExpress";
    if(cLen==16 && "6011 in beginning")
        bankcc = "Discover";
    if(cLen==16 && c[0]==5 && c[1]==1)
        bankcc="MasterCard";
    if(cLen==16 && c[0]==5 && c[1]==5)
        bankcc="MasterCard";
    if(c[0]==4)
        bankcc="Visa";
    else
        bankcc = "Uknown Bank"
    return bankcc;

3 个答案:

答案 0 :(得分:2)

bool got_length_and_prefix(string s, int desired_length, string desired_prefix) {
  if (s.length() != desired_length) return false;
  if (s.find(desired_prefix) != 0) return false;
  return true;
}

string validatebankcc(string c, int /* cLen useless here*/, bool& ccOK) {
  ccOK = true;

  if (got_length_and_prefix(c, 15, "34")) return "AmericanExpress";
  if (got_length_and_prefix(c, 15, "37")) return "AmericanExpress";
  if (got_length_and_prefix(c, 16, "6011")) return "Discover";
  if (got_length_and_prefix(c, 16, "51")) return "MasterCard";
  if (got_length_and_prefix(c, 16, "55")) return "MasterCard";
  if (c[0] == '4') return "Visa";

  ccOK = false;
  return "Unkown Bank";
}

虽然总体设计不好。将银行名称作为字符串返回正在为麻烦而烦恼(这也导致无用的ccOK标志,可以用BANK_UNKNOWN替换或像这样的smth。将字符串长度与字符串一起传递,知道它的长度也闻起来像麻烦。

答案 1 :(得分:0)

if (c.find("6011") != string::npos && c.find("6011") == 0) //"6011" in beginning
{
}

答案 2 :(得分:0)

首先,您不需要传递字符串长度 - 有一个成员函数size()。其次,你应该经过const &。最后,您可以使用find_first_of来简化此操作:

因此,您的方法将如下所示:

string validate_bank_cc(const string& c, bool& ccOk) 
{
    if((c.size() == 15) && (c.find_first_of("34") == 0))
        return "AmericanExpress";
    //etc...
}