0

15 ~ 16 桁の入力をチェックし、それらがどのバンクに属しているかを確認するプログラムを作成しようとしています。私がコーディングしている言語(c++)に慣れていないので、いくつかのポインタが欲しいです。残りのコードがないとコピー アンド ペーストできないことはわかっていますが、すべてを投稿するには時間がかかりすぎます。いくつかのことについて少しアドバイスが必要です。

現在、入力の長さと文字列の最初の 2 つの値をチェックするプログラムがあります。今の方法よりも簡単な方法があれば知りたいです。

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

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

必要なのは、最初の 2 つの数値が 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;
4

3 に答える 3

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 またはそのようなものに置き換えることができます。文字列の長さを既知の文字列と一緒に渡すのも問題の匂いがします。

于 2013-01-14T02:59:55.060 に答える
0
if (c.find("6011") != string::npos && c.find("6011") == 0) //"6011" in beginning
{
}
于 2013-01-14T02:54:46.637 に答える
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...
}
于 2013-01-14T02:55:52.407 に答える