从字符串的开头查找单词的特定编号

问题描述 投票:0回答:1

我一直在使用来自我的jira的api调用收集信息。收集的信息保存在正文文件中,并且具有以下内容:

无票:

{"startAt":0,"maxResults":50,"total":0,"issues":[]}{"startAt":0,"maxResults":50,"total":0,"issues":[]}

一张票:

{"expand":"names,schema","startAt":0,"maxResults":50,"total":1,"issues":[{"expand":"operations,versionedRepresentations,editmeta,changelog,renderedFields","id":"456881","self":"https://myjira...com","key":"TICKET-1111","fields":{"summary":"[TICKET] New Test jira","created":"2018-12-17T01:47:09.000-0800"}}]}{"expand":"names,schema","startAt":0,"maxResults":50,"total":1,"issues":[{"expand":"operations,versionedRepresentations,editmeta,changelog,renderedFields","id":"456881","self":"https://myjira...com","key":"TICKET-1111","fields":{"summary":"[TICKET] New Test jira","created":"2018-12-17T01:47:09.000-0800"}}]}

两张票:

{expand:schema,names,startAt:0,maxResults:50,total:2,issues:[{expand:operations,versionedRepresentations,editmeta,changelog,renderedFields,id:456881,self:https://myjira...com,key:TICKET-1111,fields:{summary:[TICKET] New Test jira,created:2018-12-17T01:47:09.000-0800}},{expand:operations,versionedRepresentations,editmeta,changelog,renderedFields,id:320281,self:https://myjira...com,key:TICKET-2222,fields:{summary:[TICKET] Test jira,created:2016-03-18T07:58:52.000-0700}}]}{expand:schema,names,startAt:0,maxResults:50,total:2,issues:[{expand:operations,versionedRepresentations,editmeta,changelog,renderedFields,id:456881,self:https://myjira...com,key:TICKET-1111,fields:{summary:[TICKET] New Test jira,created:2018-12-17T01:47:09.000-0800}},{expand:operations,versionedRepresentations,editmeta,changelog,renderedFields,id:320281,self:https://myjira...com,key:TICKET-2222,fields:{summary:[TICKET] Test jira,created:2016-03-18T07:58:52.000-0700}}]}

等。

使用此代码,我已经能够收集所有公开票证:

std::ifstream t("BodyOpenIssues.out");
std::string BodyString((std::istreambuf_iterator<char>(t)),
    std::istreambuf_iterator<char>());
// Removing Quotes
BodyString.erase(std::remove(BodyString.begin(), BodyString.end(), '"'), BodyString.end());
int Result = 0;
unsigned first = BodyString.find("total:");
unsigned last = BodyString.find(",issues");
std::string TotalOpenIssues = BodyString.substr(first + 6, last - (first + 6));
Result = std::stoi(TotalOpenIssues);

return Result;

使用第二个功能,我试图基于已打开的总票证来获取密钥。

if (GetOpenIssuesNumber() > 0)
{
    std::ifstream t("BodyOpenIssues.out");
    std::string BodyString((std::istreambuf_iterator<char>(t)),
        std::istreambuf_iterator<char>());
    // Removing Quotes
    BodyString.erase(std::remove(BodyString.begin(), BodyString.end(), '"'), BodyString.end());
    unsigned first = BodyString.find("key:TICKET-");
    unsigned last = BodyString.find(",fields");
    std::string TotalOpenIssues = BodyString.substr(first + 11, last - (first + 11));
    String^ Result = gcnew String(TotalOpenIssues.c_str());
    return "TICKET-" + Result;
}
else
{
    return "No open issues found";
}

我的意思是:如果Total为1,则从头开始搜索并找到第一个键TICKET-1111。如果Total为2,则从头开始搜索并获得第一个键TICKET-1111,然后从那里继续查找下一个键TICKET-2222。然后根据该总数在该字符串中找到那么多键。

我从类型之间的所有强制转换中迷失了,就像ifstream读取文件并将结果保存在std :: string中一样。找到之后,我将结果保存在System :: String中以在我的Label中使用。.我一直在研究,发现可以使用char数组,但不能根据BodyString.length()使它动态化。

如果需要更多信息,请告诉我。任何建议都非常感谢!预先谢谢!

arrays string find c++-cli
1个回答
0
投票
我去了nlohmann json库。它拥有我需要的一切。谢谢核桃!

这些格式为JSON。您应该为C ++使用JSON库,并使用该库解析文件。使用搜索/替换是不必要的复杂操作,您可能会碰到一些迟早未曾考虑过的极端情况(您是否真的希望代码随机遗失票证等?)。同样,String ^不是C ++。您是在编写C ++ / CLI而不是C ++吗?如果是这样,请标记c ++-cli而不是c ++。 –胡桃木
© www.soinside.com 2019 - 2024. All rights reserved.