2017-06-11 13 views
0

std :: string :: findは、何かを見つけることになっていても常にstring :: nposを返します。この場合、私は{新しい行に続いて見つけることを試みています。しかし、私がそこに置いた文字列に関係なく、それを見つけることはできません。std :: string :: findは常にstring :: nposを返します。

ここ
pos=0; 
while(pos!=string::npos) 
{ 
    ko=input.find("{\n"); //here is the problem!!! 
    if(ko!=string::npos && input[ko]=='\n') 
    { 
     input.erase(ko, 3); 
     kc=input.find("}", ko); 
     for(pos=input.find("\",", ko); pos<kc; pos=input.find("\",\n", pos)) 
     { 
      input.erase(pos, 4); 
      input.insert(pos, " | "); 
     } 
     pos=input.find("\"\n", ko); 
     input.erase(pos, 3); 
    } 
    else 
    { 
     break; 
    } 
} 
pos=0; 
cn=1; 
for(pos=input.find("\"", pos); pos!=string::npos; pos=input.find("\"", pos)) 
{ 
    input.erase(pos,1); 
    if(cn) 
    { 
     input.insert(pos,"R"); 
    } 
    cn=1-cn; 
} 

入力が持っているものの作品:

-- declaring identifiers of state and final states 
Detecting_SIDS = { 
    "Detecting", 
    "Detecting_CleanAir", 
    "Detecting_GasPresent" 
} 

-- declaring identifiers of transitions 
Detecting_TIDS = { 
    "__NULLTRANSITION__", 
    "Detecting_t2", 
    "Detecting_t3", 
    "Detecting_t4", 
    "Detecting_t5" 
} 

このコードは次のように上にこの入力を有効にすることになっている:

-- declaring identifiers of state and final states 
datatype Detecting_SIDS = RDetecting | RDetecting_CleanAir | RDetecting_GasPresent 

-- declaring identifiers of transitions 
datatype Detecting_TIDS = RNT | RDetecting_t2 | RDetecting_t3 | RDetecting_t4 | RDetecting_t5 
+1

。あなたは常に偽の状態を与えています。 – krzaq

+0

仮定は常に "私はおそらく何か間違ったこと"でなければなりません。そして確かにあなたはそうしました。 'std :: find'が返すものを読んでください。 –

+0

おっと、&&入力[ko] == '\ n'は有罪でした。私はいくつかのデバッグを行い、それを外すことを忘れてしまった。感謝@krzaq –

答えて

0

私はあなたが入力を通過すべきだと思いますstd::find_first_ofアルゴリズム。これからの戻り値は積分器なので、ループがstd :: end(入力)と等価で終了するはずです。このイテレータを使用すると、次の文字があなたの '\ n'であるかどうかを見ることができます。

これは表示のためにコンパイルされていないコードである:それは、次に `入力[KO]`しない `の\ N '、` `{等しくなる何かを見つけた場合

auto ptr = std::begin(input); 
auto end = std::end(input); 

while(ptr != end) 
{ 
    ptr = std::find_first_of(ptr, end, '{'); 

    if (ptr == end) 
     break; 

    else if (++ptr == end) 
     break; 

    else if (*ptr == '\n) 
    { 
     //Do Processing// 
    } 
} 
関連する問題