2016-04-20 12 views
1

郵便番号を入力するプロンプトが表示されるプロジェクトで作業しています。私はそれが5桁の数字であることを確認する必要があります(私はそれが実際の郵便番号であることを確認する必要はありません)。ここでユーザー入力が5桁の数字であることを確認

は、私のコードの一部です。

string userInput; 
cout << "Zip Code> "; 
getline(cin, userInput, '\n'); 


while (stoi(userInput)<10000 || stoi(userInput) > 99999){ 
    cout << endl << endl << "You must enter a valid zip code. Please try again." << endl; 
    cout << "Zip Code>" << endl; 
    getline(cin, userInput, '\n'); 
} 

PropertyRec.setZipCode(stoi(userInput)); 

郵便番号がゼロで始まっていない限りこれが正常に動作します。そうであれば、検証はうまくいかず、入力文字列が整数に変換されると、最初のゼロは決して変数に保存されません。データベースに保存するとき

は、私は文字列として郵便番号を残すべきか?もしそうなら、正確に5文字があり、各文字が数字であることをどのように確認できますか?

+1

文字列として取り、サイズ()を確認しますか? –

+0

入力に5文字あり、各文字が数字であることを確認してください。 –

+0

また、あなたが余分なものを必要としない限り、 'std :: endl'も使用しないでください。 '' \ n ''は行を終わらせます。 –

答えて

8

使用std::all_ofisdigitstring::size()郵便番号が有効であるかどうかを判断するために:

#include <string> 
#include <algorithm> 
#include <cctype> 
//... 
bool isValidZipCode(const std::string& s) 
{ 
    return s.size() == 5 && std::all_of(s.begin(), s.end(), ::isdigit); 
} 

Live Example

Declarative Programmingプラグ:

注あなたが出て言うならば大声ラインそのisValidZipCode機能、それはあなたの記述に合っています(文字列は5に等しいサイズでなければならず、文字のすべて " ersは数字でなければなりません)。

+0

ありがとうございました!よく働く。 – Brent

4

あなたはstd::stringとして入力を受けているので、あなたは文字の右の量を持っていることを確認するためにstd::string::length(またはstd::string::size)を使用することができます。

if (userInput.length() != 5) 
{ 
    // Input is invalid 
} 

、彼らは唯一の数字かどうかを確認するために、user4581301ポイント@としてあなたは

if (userInput.length() == 5 && std::all_of(s.begin(), s.end(), ::isdigit)) 
{ 
    // Input is valid 
} 

std::all_ofisdigitを使用する(またはthis questionで答えをチェックアウトする)ことができますからそれは注目に値しますその次の行

PropertyRec.setZipCode(stoi(userInput)); 

あなたは< 5だ任意の郵便番号は、先頭の0をしているが、それは可能性がはるかに簡単だと仮定します処理を実装しない限り、あなたはstd::string(としてあなたの郵便番号を格納する必要があるかもしれないので、あなたが持っているすべての主要な0を削除します正確に-でそれを格納するために)

0

あなたは文字列のサイズを取得するための文字列サイズの機能を使用することができます。他の変数に文字列のサイズを保存し、5未満であるかどうかを検証します。