如何将输入线分成多个变量?

时间:2012-12-10 06:44:32

标签: c++ file parsing

我有一个文件,其中包含以下信息的行和列:

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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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]);

我希望,这很清楚。

答案 2 :(得分:0)

尝试分解文件组件:

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

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

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

这看起来像是作业,所以我会让你把其余部分放在一起。

答案 3 :(得分:0)

我会尝试使用正则表达式,这些都是这样的:

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

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