2011-07-31 78 views
0

當我嘗試執行該程序時,輸出按照預期在第一次迭代時發生。但對於第二次迭代,出不來如預期...substr在C++中的問題

int main(){ 
     string insertBuffer; 
     string valSep; 
     valSep = ":"; 
     string configParamSep = "\r\n"; 
     int configParamSepSize = 2; 
     string configParam; 
     string::size_type mCPos = 0; 
     string::size_type mCBeginPos = 0; 
    int finished = 0; 
    string one = "hai: yes"; 
    string two = "tension: no"; 
     insertBuffer = one + "\r\n" + two + "\r\n"; 

    cout<<"OUTPUT:"<<"\n"; 

     while (!finished){ 
       if(!(mCBeginPos >= insertBuffer.length()) && ((mCPos = insertBuffer.find(valSep,mCBeginPos)) != string::npos)){ 
         configParam = insertBuffer.substr(mCBeginPos,mCPos); 
       }else{ 
         finished = 1; 
         break; 
       } 
     cout<<configParam<<"\n"; 
       mCBeginPos = mCBeginPos + insertBuffer.find(configParamSep,mCBeginPos) + configParamSepSize; 
    } 

    return 0; 
} 

OUTPUT:

hai 
tension: no 

但預計outpu是: -

hai 
tension 

任何線索,爲什麼發生這種情況?

回答

2
basic_string<CharType, Traits, Allocator> substr(
    size_type _Off = 0, 
    size_type _Count = npos 
) const; 

第二個參數不是結束索引。

一個簡單的修復:configParam = insertBuffer.substr(mCBeginPos,mCPos - mCBeginPos);