2017-03-22 5 views
0

私はスクリプトを受け取り、htmlスパンでテキストを強調表示し、GTKMMウィンドウに出力するC++プロジェクトに取り組んでいます。私はそれが働いているが、私はキーワードのベクトルを使用する代わりにコードを登録するアルゴリズムを作成したい。 (私にはウェブサイトやものがありますが、このソフトウェアを作りたいと思っています)。文字列内のコードを見つける

私は今UnityC#のハイライトに取り組んでいます。自分自身と私のコーディング教師が修正できないような問題があります。 (私の先生は、何が間違っているかを確認するために何時間もかかりませんでしたが、私たちはしばらくそれを見てきました)。

すべてのピリオドを探してベクトルに入れてから、ベクトルをループして右の部分文字列を取得しようとします。私は期間+ 1の位置に部分文字列を始めるので、期間は含めません。次に、次のピリオドが来るときに部分文字列を終了したいので、単語の先頭から別のピリオドが見つかると確認します。最初に動作し、 "transform"を出力しますが、2度目は "position.x; var a = 1"を出力し、3回目は "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上で台無しに理解は、:)

を助けてください

よろしくお願いします。 Dani

答えて

0

Nevermind、私はばかです。私は部分文字列の関数を間違って読んで、サイズよりも終わりの位置を与えなければならないと思った。

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; 
    } 
関連する問題