我有一个文件,其中包含以下信息的行和列:
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;
我已经尝试过调整上面的代码很长一段时间了,但没有运气,我现在想不出其他任何方法。
答案 0 :(得分:4)
您可以使用std::find_first_of
和std::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)
尝试分解文件组件:
从这些组件中,您可以推断:
抓取第一个数字就像使用文件流<<
读取一样简单。
获取字符串需要您检查,直到找到一个数字,一次抓取一个字符并将其插入字符串。最后一个数字与第一个数字一样,使用文件流<<
这看起来像是作业,所以我会让你把其余部分放在一起。
答案 3 :(得分:0)
我会尝试使用正则表达式,这些都是这样的:
^([0-9]+)\s+(.+)\s+([0-9]+\.[0-9]+)$
我不是很擅长正则表达式语法,但是([0-9]+)
对应于一个数字序列(这是id),([0-9]+\.[0-9]+)
是浮点数(价格)和(.+)
是由“空格”字符序列与两个数字分隔的字符串:\s+
。
下一步是检查您是否需要使用“.50”或“10”之类的价格。