0

プログラムがいくつかの操作を行うことがわかった場合、数値と文字で構成される a を見つけたいのですが、 function を使用するcharと、探している文字が文字列の先頭にある場合にのみ true が返されます!!! !!stringfind()

例: これは問題の一部です。
ユーザーは 3 つの文字列 s1 、 s2 、 s3 を入力します。最初の 2 つの文字列の間には char が'a' = '+'あり、s2 と s3 の間にはchar があり'b' = '=' ます (3 つの文字列は数値であると想定されています) が、s2 が文字を含む単語である場合'm'、プログラムは s1 と s3 を整数に変換し、完全な操作 ex を書き込みます。 i/p が 3247 + 5machula2 = 3749 の場合、o/p は 3247 + 502 = 3749 になります。

http://www.spoj.com/problems/ABSYS/を解決しようとしている問題と 、問題のあるコードのこの部分は次のとおりです。

int T;
int x,y,z;
string s1 ;
string s2  , s3 ;
char a , b;
cin>>T;
for(int i=0 ; i<T ; i++)
{
         cin>>s1>>a>>s2>>b>>s3;


for (int k=0; k<s2.size(); k++)
{ 
    if (k==s2.find("m"))
    {     
        stringstream ss(s1);
        stringstream ss3(s3);

        ss>>x;
        ss3>>z;

        cout<<s1<<" "<<a<<" "<<z-x<<" "<<b<<" "<<s3<<endl;
    }   
    else break;       
}

これは 2 番目の文字列をループするループであり、char が見つかった場合'm'は上記の処理を実行する必要がありますが、ここでの問題は'm'、文字列の先頭にある場合にのみ機能し、それ以外の場所には機能しないことです。

4

2 に答える 2

1

ループelse break;がループするのを防ぎます。

于 2013-01-05T20:45:49.727 に答える
0

開始時にのみ機能する理由は、そうでない場合はループから抜け出し、残りをチェックする機会がないためです。

[first iteration]
if (0 == s2.find("m")) //if found at beginning
    //do stuff
else break; //exit loop if not found at beginning

ループの代わりに、 m があるかどうかを確認しようとしているだけの場合は、次を使用しますfind()

if (s2.find('m') != std::string::npos)
    //"m" found in string, do the operations on s1 and s3
于 2013-01-05T20:46:20.340 に答える