2017-01-06 4 views
0

私はあなたのトピックのいくつかを検索しましたが、私は複数の異なる文字を取得する方法を把握していないようです。私は2つ/または2の間で抽出したい複数の異なる文字の間に複数の文字列を入力するにはどうすればよいですか?

string str = "AG/B/C,BC/D,AD,AE/R/B/A,AB"; 

、唯一
最終的な結果は次のようになります。

B,AD,R,B,AB 

string temp; 
for(int i=0; i < str.size(); i++)  
    { 
     temp += str[i];     
     if((str[i] == '/') || str[i] == ',')     
     { 
      //do something 
     } 
    } 
+0

regexが動作する可能性があります。それを反復することもできます。何を試しましたか? – Danh

+0

私はsize_t start = find( '/')とsize_t end = find( '/'、start)を試しました – user58504

+0

はカンマを検索しません – user58504

答えて

0
string temp = ""; 
char flag = ' '; 
int cursor = 0; 

for(int i = 0; i < str.size(); i++) 
{ 
     if(str[i] == '/' || str[i] == ',') 
     { 
       if(flag == str[i] && cursor < i-1) 
         temp+=str.substr(cursor+1,i-cursor-1)+","; 
       flag = str[i]; 
       cursor = i; 
     } 
} 
+0

私はこれが終わりまで動作することを理解しています。AB/A、AB最後にカンマがないのでABをつかまえないので、何のためにカーソルを説明できるのか不思議でした。 – user58504

+0

カーソルは '/'または '、'が最後に現れる位置です。したがって、最後のABを取得する場合は、 temp + = str.substr(カーソル+ 1、str.size() - カーソル2)+ "、";を追加する必要があります。 **の後に**ループ(私は約-2、それはチェックする必要があります) – alvis

+0

したがって、forループが終了すると、カーソルはあなたの文字列の場合は最後の "、"の位置を含み、その位置から文字列の終わりまでのすべてをtempに追加する必要があります。 – alvis

0

あなたは区切り文字をしたいので、それは複雑なユースケースでありますペアで行動する確かにそれに正規表現を使うことは可能ですが、直接処理よりも書き込みを読む方が簡単です。最後の区切り文字を保存するだけです。

string str = "AG/B/C,BC/D,AD,AE/R/B/A"; 
char last = '\0'; // initialize last separator to an impossible value 
string temp; 
for(size_t i=0; i < str.size(); i++)  
{ 
    if((str[i] == '/') || str[i] == ',') // found a separator     
    { 
     if (last == str[i]) {  // is it the second on a pair 
      std::cout << temp << std::endl; // or store temp in a vector for later use... 
     } 
     last = str[i];  // store last separator for future use 
     temp.clear();  // reset the temp string 
    } 
    else temp.push_back(str[i]); // non separator chars are added to temp string 
} 
関連する問題