c++问题中的substr

substr in c++ problem

本文关键字:substr 问题 c++      更新时间:2023-10-16

当我尝试执行程序时,第一次迭代的输出是预期的。但对于第二次迭代,out并没有像预期的那样出现。。。

int main(){
        string insertBuffer;
        string valSep;
        valSep = ":";
        string configParamSep = "rn";
        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 + "rn" + two + "rn";
    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;
}

输出:

hai
tension: no

但预期输出为:-

hai
tension

知道为什么会发生这种事吗?

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

第二个参数不是结束索引。

一个简单的修复:configParam = insertBuffer.substr(mCBeginPos,mCPos - mCBeginPos);

从此链接http://en.cppreference.com/w/cpp/string/basic_string/substr我读到第二个参数是计数,而不是位置。这有帮助吗?还是我错了?