2017-03-22 42 views
0

我正在研究一個需要腳本的C++項目,用html跨度突出顯示文本並將其輸出到GTKMM窗口中。我有它的工作,但我想做一個算法,註冊代碼,而不是使用關鍵字的向量。 (我知道有網站和東西爲我做,但我只是想製作這個軟件)。查找字符串中的代碼

我現在正在努力突出UnityC#,我有一個問題,我自己和我的編碼老師似乎無法修復。 (我的老師沒有花幾個小時來檢查什麼是錯的,但我們已經看了一會兒)。

我尋找所有的時期,並把它們放在一個向量中,然後我遍歷這個向量並嘗試找到正確的子字符串。我在期間+ 1的位置開始子字符串,所以我不包括這個時間段。然後我想在下一個時段到來時結束子串,所以我檢查它是否從該詞的開始處開始找到另一個時段。它第一次工作並打印「變換」,但第二次打印「position.x; var a = 1」,第三次打印「x; var a = 10;」。

std::vector<std::size_t> positions; 
std::string pats = "GameObject.transform.position.x; var a=10;"; 
std::size_t pos = 0; 

while(pats.find(".", pos) != std::string::npos) 
{ 
    std::size_t found = pats.find(".", pos); 
    if(found != std::string::npos) 
    { 
     positions.push_back(found); 
    } 
    pos = found+1; 
} 

for(int i = 0; i &lt; positions.size(); i++) 
{ 
    std::cout&lt;&lt;pats.substr(positions[i]+1, pats.find_first_of(".", positions[i])-1)&lt;&lt;endl; 
} 

我知道它會弄亂在x,因爲它有它,而不是週期之後的分號,但我不明白爲什麼它弄亂的位置爲好,請幫助:)

Regards, Dani

回答

0

沒關係,我很笨。我讀了substring函數錯誤,並認爲我必須給出結束位置而不是大小。

std::vector<std::size_t> positions; 
    std::string pats = "GameObject.transform.position.x; var a=10;"; 
    std::size_t pos = 0; 

    while(pats.find(".", pos) != std::string::npos) 
    { 
     std::size_t found = pats.find(".", pos); 
     if(found != std::string::npos) 
     { 
      //std::cout<< pats.substr(found+1)<<endl; 
      positions.push_back(found); 
     } 
     pos = found+1; 
    } 

    for(int i = 0; i < positions.size(); i++) 
    { 
     std::size_t start_pos = positions[i]+1; 
     std::size_t end_pos = pats.find_first_of(".", positions[i]+1); 
     std::cout<<pats.substr(start_pos, end_pos-start_pos)<<endl; 
    }