【发布时间】:2017-10-24 01:39:41
【问题描述】:
我有一个这样格式的字符串:
"name1":1234 " name2 " : 23456 "name3" : 12345
等等……
我曾尝试使用嵌套的 while 循环和两个整数来存储要在 string::substr 中使用的位置和长度,但我找不到合适的方法来获取它(大多数情况下我都退出了字符串)。
这些值不需要存储,因为我可以调用一个函数来处理它们。
这是我到目前为止所做的:
void SomeClass::processProducts(std::string str) {
unsigned int i = 0;
std::string name;
while (i < str.length()) {
if (str[i] == '\"') {
int j = 1;
while (str[i + j] != '\"') {
j++;
}
name = str.substr(i + 1, j - 1);
i += j;
}
else if (str[i] >= '0' && str[i] <= '9') {
int j = 1;
while (str[i + j] >= '0' && str[i + j] <= '9') {
j++;
}
//This is just processes the values
std::stringstream ss;
std::string num = str.substr(i, j);
ss.str(num);
int products = 0;
ss >> products;
if (products == 0) {
Util::error(ERR_WRONG_PRODUCTS);
}
int pos = getFieldPos(name);
if (pos == -1) {
Util::error(ERR_WRONG_NAME);
}
else {
fields[pos].addProducts(products);
}
i += j;
}
i++;
}
}
提前致谢。
【问题讨论】:
-
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
-
请edit 您的问题显示您尝试过但不适合您的实际代码。到目前为止,您为自己调试做了什么?
-
你想得到什么结果?例如,您想从“name1”中得到什么?
-
名称是引号之间的内容,产品是数字
-
这正是您所期望的格式吗?都在一行,用空格隔开?
标签: c++ string text-parsing