2017-02-22 17 views
-1
#include <iostream> 
using namespace std; 
int main() 
{ 
    string s1="panamabananas"; 
    string s2="nana"; 
    int i,j,k=0; 
    string count=""; 
    for(i=0;i<s1.length();i++) 
    { 
     k=0; 

     if(s2[k]==s1[i]); 
     {       
      count+=s2[k]; 

      for(j=i+1;j<i+s2.length();j++) 
      {  
        k++; 
        if(s2[k]==s1[j]) 
        { 
         count+=s2[k]; 
         cout<<"it is: "<<count<<endl; 
        } 
        else 
        { 
         count=""; 
         break; 
        }     
      } 
     } 
    } 
    cout<<"the matched string is "<<count; 
    return 0; 
} 

如果模式s2存在於文本s1中,則搜索模式s2。並且設計一個計數器來寫入模式匹配的內容。該計數器最後必須等於nana,即它表示文本panamabananas中存在nana。 我不明白這裏發生了什麼問題。我試圖找到文本中的模式,出了什麼問題?

+4

這聽起來像你可能需要學習如何使用調試器來遍歷你的代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

目前還不清楚你真的想要輸出什麼真的你只是說「我的代碼不起作用」,但有一個想法 - 如果你正在尋找子字符串,在另一個字符串中說''nana''只需要去掉另一個字符串的長度減去「 nana「''for(i = 0; i doctorlove

回答

0

它看起來像你重置計數,即使找到模式後,因爲你沒有做任何事情擺脫外循環,並繼續。它將第一個字符串中的nana與第二個字符串中的nana進行比較,找到匹配,從內部for循環中跳出,然後返回到外部for循環。之後它會到達s1中的最後一個n,再次觸發if語句,並嘗試將「nas」與「nana」匹配。當s與n不匹配時,它將計數重置爲「」。

無論如何,如果您添加一個if語句來檢查k是否是s2的長度,那麼一旦找到該模式,您就可以立即返回。

無論如何,這就是看你的代碼的樣子。我建議通過一個調試器來完成它,讓您逐步瀏覽代碼,以便您可以看到發生的情況。