2017-02-26 10 views
-3

私がパラメータとして送る文字列が文字として最初の4文字を持ち、最後の3文字が数字であり、正確に7文字であることを確認する関数を作成する必要があります。この関数をどのようにコード化しますか?文字列に一定の文字数と数字があるかどうかを確認するにはどうすればよいですか?

+2

regexを使用することができます: '[A-Za-z] {4} [0-9] {3}' – Brandon

+0

私のクラスy主に、文字列ライブラリに含まれるものなど、基本的なものを使用する必要があります。 –

+0

長さをチェックする 'std :: string :: length()'は7で、文字の範囲を調べる 'std :: count_if()'は予想される文字数と桁数を含んでいます。または、正規表現ライブラリを使用します。 –

答えて

1

最も簡単な解決策は、個々の文字をチェックし、文字列をループになり、例えば:また

#include <string> 
#include <cctype> 

bool is4LettersAnd3Digits(const std::string &s) 
{ 
    if (s.length() != 7) 
     return false; 

    for (int i = 0; i < 4; ++i) { 
     if (!std::isalpha(s[i])) 
      return false; 
    } 

    for (int i = 4; i < 7; ++i) { 
     if (!std::isdigit(s[i])) 
      return false; 
    } 

    return true; 
} 

#include <string> 
#include <algorithm> 
#include <cctype> 

bool is4LettersAnd3Digits(const std::string &s) 
{ 
    return (
     (s.length() == 7) && 
     (std::count_if(s.begin(), s.begin()+4, std::isalpha) == 4) && 
     (std::count_if(s.begin()+4, s.end(), std::isdigit) == 3) 
    ); 
} 

また、C++ 11以降を使用している場合:

#include <string> 
#include <algorithm> 
#include <cctype> 

bool is4LettersAnd3Digits(const std::string &s) 
{ 
    if (
     (s.length() == 7) && 
     std::all_of(s.begin(), s.begin()+4, std::isalpha) && 
     std::all_of(s.begin()+4, s.end(), std::isdigit) 
    ); 
} 
+0

'std :: count_if'を' std :: all_of'に置き換えました。 – lisyarus

+0

@lisyarus 'std :: all_of()'はC++ 11で新しく追加されました。 'std :: count_if()'は以前のバージョンに存在します。私は私の答えを更新しました。 –

+0

C++ 11が使用できない環境が存在することは完全に理解していますが、C++言語の現在の公式標準(デフォルトではC++ 14)を想定するのは理にかなっています。古いバージョンを使用する必要がある場合は、これを質問に明記する必要があります。 これ以外に、素敵な答え! – lisyarus

関連する問題