我下面有一个字符串(文件行)
0.000000000,171.934206000,100.000,“ 171,925.828942”,0x0000000000000000
其中一个值位于双引号之间,并包含逗号来表示该值。
我只需要从双引号引起来的值中除去逗号。从双引号括起来的值中删除逗号后,还需要删除那些双引号。
基本上我希望上面的行像这样转换。
0.000000000,171.934206000,100.000,171925.828942,0x0000000000000000
我有以下版本的代码,但是希望有更好的版本来实现以上目的。
std::size_t doubleQuotesStartPos = 0, doubleQuotesEndPos = 0;
while ((doubleQuotesStartPos = line.find("\"", doubleQuotesStartPos)) != std::string::npos)
{
doubleQuotesEndPos = line.find("\"", doubleQuotesStartPos + 1);
if (doubleQuotesEndPos != std::string::npos)
{
std::string tempData = line.substr(doubleQuotesStartPos + 1, doubleQuotesEndPos - doubleQuotesStartPos - 1);
std::string replacedData = tempData;
strReplace(replacedData, ",", "");
line.replace(doubleQuotesStartPos + 1, tempData.length(), replacedData);
}
doubleQuotesStartPos = doubleQuotesEndPos + 1;
}
答案 0 :(得分:0)
为什么不使用正则表达式?我将口头翻译成:
匹配
"
,后跟一个或多个数字,后跟,
,后跟一个或多个(数字或.
),后跟"
。
它映射到正则表达式"\d+,[\d\.]+"
。要引用匹配的内容,您可以引入捕获组:
找到
"(\d+),([\d\.]+)"
并替换为\1\2
。
您可以在例如记事本++。
如果您需要在C ++应用程序中进行操作,则C ++自C ++ 11起也有regex support。这是demo!