字符串的C ++向量,擦除字符的行为很奇怪



我正在尝试为我的数据编写自己的json解析器。单个条目在剪切时如下所示

`"ID":"612","path":"letter_2013-12-16 17:49:43  0000.png","longitude":"24.9767","latitude":"60.2099","letter":"K"`

现在我试图将这些放入另一个向量中,在那里我剪掉了所需的单个数据。由于我没有找到从 c++ 中的字符串中删除" 的方法(欢迎建议),因此我将按以下步骤进行:

individualEntries=ofSplitString(fullResponse, "},{");
for(int i=0; i<individualEntries.size(); i++){
    printf("entry %s n",individualEntries[i].c_str());
    vector<string> cutEntries =ofSplitString(individualEntries[i], ",");
    for(int j=0; j<cutEntries.size(); j++){
        //delete "ID":"
        cutEntries[0].erase (0, 6);
        //delete "
        cutEntries[0]=cutEntries[0].substr(0,cutEntries[0].length()-1);
        //delete "path":"
        cutEntries[1].erase(0,4);
        cutEntries[1]=cutEntries[1].substr(0,cutEntries[1].length()-1);
        //cutEntries[1].append("g");
        printf("%s ",cutEntries[j].c_str());
    }
    printf("n");
}

它导致:

1159 letter_2014-01-19 12:59:05  0000.pn "longitude":"25.0903" "latitude":"60.1956" "letter":"I" 

它在第一部分工作正常,我很好地剪掉了我的 ID,但是当试图剪掉"路径":"时,它开始表现得很奇怪。长度应该是长度为 8,但切掉 4 可以达到正确的目标。当执行子字符串以删除最后一个字母时,它会删除最后 2 个字母。奇怪的是,第一个条目(cutEntries[0])不会发生同样的情况,而只会发生在第二个条目(cutEntryries[1])上。有什么想法吗?

此循环

for(int j=0; j<cutEntries.size(); j++){
    //delete "ID":"
    cutEntries[0].erase (0, 6);
    //delete "
    cutEntries[0]=cutEntries[0].substr(0,cutEntries[0].length()-1);
    //delete "path":"
    cutEntries[1].erase(0,4);
    cutEntries[1]=cutEntries[1].substr(0,cutEntries[1].length()-1);
    //cutEntries[1].append("g");
    printf("%s ",cutEntries[j].c_str());
}

没有意义,因为你至少cutEntries.size()时间正在做

    cutEntries[0].erase (0, 6);
    //delete "
    cutEntries[0]=cutEntries[0].substr(0,cutEntries[0].length()-1);

此操作应在循环外部完成,或者您可以编写例如

if ( j == 0 )
{
   cutEntries[j].erase (0, 6);
    //delete "
    cutEntries[j]=cutEntries[j].substr(0,cutEntries[j].length()-1);
}

但无论如何,这是一个糟糕的设计。

这实现了目标:

fullResponse=ofToString(response.data);
//printf("urlResponse %s n",fullResponse.c_str());
ofStringReplace(fullResponse, "[{", "");
ofStringReplace(fullResponse, "}]", "");
individualEntries=ofSplitString(fullResponse, "},{");
for(int i=0; i<individualEntries.size(); i++){
    printf("entry %s n",individualEntries[i].c_str());
    vector<string> cutEntries =ofSplitString(individualEntries[i], ",");
    //delete the first parts in all of them
        ofStringReplace(cutEntries[0], ""ID":"", "");
        ofStringReplace(cutEntries[1], ""path":"", "");
        ofStringReplace(cutEntries[2], ""longitude":"", "");
        ofStringReplace(cutEntries[3], ""latitude":"", "");
        ofStringReplace(cutEntries[4], ""letter":"", "");
    //delete the last " in all of them
    ofStringReplace(cutEntries[0], """, "");
    ofStringReplace(cutEntries[1], """, "");
    ofStringReplace(cutEntries[2], """, "");
    ofStringReplace(cutEntries[3], """, "");
    ofStringReplace(cutEntries[4], """, "");
    for(int j=0; j<cutEntries.size(); j++){
        printf("%s ",cutEntries[j].c_str());
    }
    printf("n");
}

最新更新