2017-04-11 94 views
-4

我知道如何删除尾随逗号,但我似乎无法弄清楚如何从所有迭代中删除尾随逗号,因为我的代码只删除最后一个。我得到的输出是调用此方法时,以下多次:删除所有迭代中的尾随逗号

A:on 0 -> B, on 1 -> A, 
B:on 0 -> C, on 1 -> A, 
C:on 0 -> C, on 1 -> A 

string FSA::transitions_to_string(string s) { 

    std::ostringstream oss; 
    string output = ""; 
    map<string, string>::iterator itr1; 
    map<string, map<string, string> >::iterator itr2; 
    map<string, map<string, string> >::iterator itr3; 

    itr3 = table_.find(s); 

    if (itr3 == table_.end()) { 
     throw domain_error (s + " doesn't exist"); 
    } 

    for (itr2 = table_.begin(); itr2 != table_.end(); itr2++) { 
    oss << itr2->first << ":"; 
     for (itr1 = itr2->second.begin(); itr1 != itr2->second.end(); itr1++) { 
      oss << "on " << itr1->first << " -> " << itr1->second << ", "; 
      output = oss.str(); 
     } 

    oss << endl; 
    } 

    return output.substr(0, output.size() - 2); 
} 
+1

你是写逗号的人,所以你不需要“删除”它;只是不要把它写在第一位。 –

+0

我不知道你是否知道这段代码的作用?它是如何工作的?你自己写了吗? –

+0

我只是想删除最后一个尾随逗号,所以输出实际上是: 'A:在0 - > B,在1 - > A B:在0 - > C,在1 - > A C:开0 - > C,on 1 - > A' – FireGriffin

回答

1

而不是删除尾随逗号,如@BoundaryImposition笔记,你可以不会写

for (itr2 = table_.begin(); itr2 != table_.end(); itr2++) { 
    string delim = ""; // set blank for first element of each inner loop 
    oss << itr2->first << ":"; 
    for (itr1 = itr2->second.begin(); itr1 != itr2->second.end(); itr1++) { 
     oss << delim << "on " << itr1->first << " -> " << itr1->second; 
     delim = ", "; // after first loop this is a nop 
    } 
    oss << endl; 
} 
return oss.str();