2016-05-01 8 views
0

char aまたはchar 1を文字列で検索しようとしています。 見つからない場合、、私のプログラムにエラーメッセージが表示され、終了します。これは私の機能ですが、動作していないようです。私を助けてください、ありがとう。Find関数をC++で

*更新、文字列がa2の場合、無効なメッセージが表示されますが、文字列がa1の場合のみ続行されます。

bool hasAor1(const std::string& string) 
    { 
     return string.find_first_of("a1") != std::string::npos; 
    } 

    //find valid key, key must have numbers like 1234 instead of 134 
    void validstring(string key) 
    { 
     if(key.length() == 2) 
     { 
     hasAor1(key) == false; 
     cerr << "invalid key"; 
     }  
    } 
+0

デフォルトのc文字列関数strstrの使用はいかがですか? – Jas

+0

@Jasまず、これは 'C++ 'タグではなく' C++'タグをつけられています。第二に、その関数で '' a1 ''を使うと、 '' a''や '' 1 ''ではなく' 'a1''と正確に見えます。[here](http://ideone.com/LXib3N) 。 –

+3

'hasAor1(key)== false;' - これは何をすると思われますか? –

答えて

3

std::findここで使用する方がはるかに簡単です。

auto iter = find_if(begin(key), end(key), 
     [](char v){ return v=='a' || v=='1'; }); 

if (iter == key.end()) cerr << "invalid key"; 
+0

find_first_ofを使用するよりもずっと簡単でfind_ifを読むのが長くて難しいのはなぜですか? – DAV

1

機能hasAor1はOKです。

「hasAor1(key)== false;」という行を変更します。 (!hasAor1(キー))CERR < < "無効なキー" であれば

のようなものに;。

ので

//find valid key, key must have numbers like 1234 instead of 134 
    void validstring(string key) 
    { 
     if(key.length() == 2) 
     { 
     if (hasAor1(key) == false) 
      cerr << "invalid key"; 
     }  
    } 

それが何をした場合に行う必要が行うことになっているものvalidstringは明らかではありませんキーの長さは2ではありませんか?これはブールか何かを返すべきではありませんか?それは、メッセージを印刷することですが、キーの長さが2の場合のみです。キーが "543 "または" 145 "または" 1a3 "?

コード "//有効なキーを見つける、キーは134の代わりに1234のような数字を持たなければなりません"有効なキーのすべての例にhasAor1が無効とマークする文字 '1'が含まれているので意味がありません。

考えられる入力のバリエーションとそれぞれの場合に起こりたいことについて考えることができます。

+0

こんにちは、私はそれを解決しました。私は時間があるときに私は答えを更新します。ご協力ありがとうございました。私のプログラムの他の部分を改善しようとしています。良い一日を。 – Bhappy

関連する問題