0

我有一个包含行和列信息的文件,例如:

104857 Big Screen TV  567.95
573823 Blender         45.25

我需要将此信息解析为三个单独的项目,一个包含左侧标识号的字符串,一个包含项目名称的字符串,以及一个包含价格的双变量。信息总是出现在相同的列中,即以相同的顺序。

我很难做到这一点。即使不从文件中读取并仅使用示例字符串,我的尝试也只会输出混乱:

string input   = "104857 Big Screen TV  567.95";
string tempone = "";
string temptwo = input.substr(0,1);
tempone += temptwo;
for(int i=1 ; temptwo != " " && i < input.length() ; i++)
{
  temptwo = input.substr(j,j);
  tempone += temp2;
}
cout << tempone;

我已经尝试调整上面的代码很长一段时间了,但没有运气,目前我想不出任何其他方法来做到这一点。

4

4 回答 4

4

std::find_first_of您可以使用and找到第一个空格和最后一个空格std::find_last_of。您可以使用它来更好地将字符串拆分为 3 - 第一个空格在第一个变量之后,最后一个空格在第三个变量之前,中间的所有内容都是第二个变量。

于 2012-12-10T06:51:34.113 回答
0

下面的伪代码怎么样:

string input = "104857 Big Screen TV  567.95";
string[] parsed_output = input.split(" "); // split input string with 'space' as delimiter

// parsed_output[0] =  104857
// parsed_output[1] =  Big
// parsed_output[2] =  Screen
// parsed_output[3] =  TV
// parsed_output[4] =  567.95

int id = stringToInt(parsed_output[0]);
string product = concat(parsed_output[1], parsed_output[2], ...  ,parsed_output[length-2]);
double price = stringToDouble(parsed_output[length-1]);

我希望,这很清楚。

于 2012-12-10T06:52:51.950 回答
0

那么尝试分解文件组件:

  • 你知道一个数字总是第一位的,我们也知道一个数字没有空格。
  • 数字后面的字符串可以有空格,但不包含任何数字(我假设)
  • 在这个标题之后,你会有更多的数字(没有空格)

从这些组件中,您可以推断:

获取第一个数字就像使用 filestream 读取一样简单<<。获取字符串需要您检查直到达到一个数字,一次抓取一个字符并将其插入到字符串中。最后一个数字就像第一个一样,使用文件流<<

这似乎是家庭作业,所以我会让你把剩下的放在一起。

于 2012-12-10T06:54:21.073 回答
0

我会尝试一个正则表达式,类似于以下内容:

^([0-9]+)\s+(.+)\s+([0-9]+\.[0-9]+)$

我不是很擅长正则表达式语法,但([0-9]+)对应的是一个数字序列(这是id),([0-9]+\.[0-9]+)是浮点数(价格),(.+)是由“空格”字符序列与两个数字分隔的字符串:\s+. 下一步是检查您是否需要它来处理“.50”或“10”等价格。

于 2012-12-10T07:00:13.630 回答