的最后一个字符,我想检查以下内容:c + +比较和替换字符串流
- 如果附加到
stringstream
的最后一个字符是一个逗号。 - 如果它是删除它。
std::stringstream str;
str << "["
//loop which adds several strings separated by commas
str.seekp(-1, str.cur); // this is to remove the last comma before closing bracket
str<< "]";
的问题是,如果没有在所述环路中加入,开口支架从字符串中移除。所以我需要一种方法来检查最后一个字符是否是逗号。我这样做是这样的:
if (str.str().substr(str.str().length() - 1) == ",")
{
str.seekp(-1, rteStr.cur);
}
但我对此感觉不太好。有一个更好的方法吗?
关于循环:
回路用于标记化的一组通过插座接收到的命令的并格式化通过另一插口发送到其他程序。每个命令以OVER
标志结尾。
std::regex tok_pat("[^\\[\\\",\\]]+");
std::sregex_token_iterator tok_it(command.begin(), command.end(), tok_pat);
std::sregex_token_iterator tok_end;
std::string baseStr = tok_end == ++tok_it ? "" : std::string(*tok_it);
while (baseStr == "OVER")
{
//extract command parameters
str << "extracted_parameters" << ","
}
我怀疑这可能是更容易的在不添加最终逗号工作第一名。 – Galik
在某个地方有一个关于在由逗号分隔的循环中添加项目的问题,而不是在最后一项中添加逗号。编辑:可能[this](http://stackoverflow.com/questions/3496982/printing-lists-with-commas-c) – Tas
只是遍历字符串的总数 - 1,在每个字符串之后添加一个逗号,以及之后循环添加最后一个字符串。如果没有或一个字符串,则跳过循环。 –