2016-05-03 18 views
1

ブール関数に文字列を渡すことで、どのように機能するのですか?私はユーザーに一連の文字列を入力させる必要があり、各エントリの後に、文字列が与えられた基準に適合しているかどうかに応じてプログラムはフィードバックを与えるべきです。文字列には、 "1101"の部分文字列が含まれている必要があります。すべてのあなたの助けブール関数に文字列を渡す

#include <iostream> 
#include <cstring> // for strstr 
#include <string> 
#include <cctype> 

using namespace std; 

bool stringCompare(char*y); 
string str2; 
int main() 
{ 
    string str1, str2; 
    str1= "1101"; 

    do 
    { 
    cout << "Please enter your string: " << endl; 
    cin >> str2; 

    while((stringCompare(str2)) == true) 
    { 

    if(strstr(str2.c_str(),str1.c_str())) // Primary string search function 
    { 
    cout << "ACCEPTED " << endl; 
    } 
    else 
    cout << "NOT ACCEPTED " << endl; 
} 
    } while (2 > 1); 

    return 0; 
} 

bool stringCompare(char*y) 
{ 
    for(int a = 0; a < strlen(str2); a++) 
    { 
    if (!isdigit(str2[a])) 
    return false; 
    } 
    return true; 
} 
+0

C++、ごめんなさい –

答えて

4

stringCompareのおかげでは、タイプchar*のパラメータを取りますが、あなたはstd::stringに合格しようとしています。それは動作しません。

あなたはstd::stringの内部char配列にconst char*ポインティングを取得するには、std::stringc_str方法を使用することができます。つまり、パラメータをconst char*に設定する必要があります。

または、はるかに良い、あなたはstd::stringへの参照を取るためにstringCompareを置き換えることができます。

bool stringCompare(string& y) 

str2.length()strlen(str2)を変更します。 (または、より良い、単純にループ全体を置き換える:

for(char& ch : str2) // range-based for-loop loops over the entire str2 
{ 
    if (!isdigit(ch)) 
     return false; 
} 


また、あなたは戻り値== trueを比較する必要はありません。どうぞ:

while(stringCompare(str2)) 
関連する問題