2013-01-05 43 views
0

我想在字符串中找到一個由數字和字符組成的字符,如果發現程序執行某些操作,但是當我使用函數find()時,它只返回true,如果我所查找的字符只是在字符串的開始!!!!!沒有函數查找字符串在c + +工作只與第一個字符?

例如:這是問題的一部分! 用戶輸入3個字符串s1,s2,s3,在前2個字符串之間有char'a'='+'& s2 & s3還有char b ='='(3個字符串應該是數字),但如果s2是包含字母'm'的字,程序將s3轉換爲intgeres &寫完整操作 例如:如果i/p是3247 + 5machula2 = 3749 那麼o/p將是3247 + 502 = 3749

以下是我正在試圖解決http://www.spoj.com/problems/ABSYS/ 問題,我的代碼,這部分有問題:
`INT噸; int x,y,z; string s1; string s2,s3; char a,b; cin >> T; 對(INT I = 0; I> 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;  
} ` 

這是在第二串迴路的迴路,如果它發現了一個字符 'M'它應該做什麼上面提到的,但這裏的問題是,如果「m」是繩子,沒有其他地方的開始,它纔有效。

+0

請編寫併發布[SSCCE(HTTP:// WWW。 sscce.org),它重現了你所問的問題。 –

+1

'find'返回找到的字符的位置,當它在位置0處找不到時就打破。 – Default

+0

這裏是我想解決的問題http://www.spoj.com/problems/ABSYS/ – user1951755

回答

1

else break;防止環路從不斷循環。

0

的只有在開始的時候它才起作用的原因是因爲如果不是這樣,你就會跳出循環,所以它沒有機會檢查其餘部分:

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

取而代之的是循環的,如果你只是想看看是否有男,只需使用find()

if (s2.find('m') != std::string::npos) 
    //"m" found in string, do the operations on s1 and s3 
相關問題