Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从字符串C++中提取某些整数_C++_String_Int - Fatal编程技术网

从字符串C++中提取某些整数

从字符串C++中提取某些整数,c++,string,int,C++,String,Int,大家好 我很难从字符串中提取所需的整数。我可以从文件中读取以下内容: itemnameitemnumber价格百分比加成 例子 礼服-u2285 24.22 37% 两个B1ASK1-m1275 90.4 1% 我一直试图做的是将项目编号与项目名称分开,以便存储项目编号作为排序参考。如您所见,第一个示例itemnameitemnumber是一个清晰的字符与数字分隔,而下一个示例的项目名称中有数字 我已经尝试了几种不同的方法,但是对于某些项目名称,除了名称之外还有整数,这超出了我的经验 如果有人能

大家好

我很难从字符串中提取所需的整数。我可以从文件中读取以下内容:

itemnameitemnumber价格百分比加成

例子

礼服-u2285 24.22 37%

两个B1ASK1-m1275 90.4 1%

我一直试图做的是将项目编号与项目名称分开,以便存储项目编号作为排序参考。如您所见,第一个示例itemnameitemnumber是一个清晰的字符与数字分隔,而下一个示例的项目名称中有数字

我已经尝试了几种不同的方法,但是对于某些项目名称,除了名称之外还有整数,这超出了我的经验


如果有人能在这方面帮助我,我将非常感谢他们的时间和知识

您可以对字符串进行迭代,将数字推送到向量,然后使用stringstream将其转换为整数

祝您好运

我不知道,如果itemnumber有固定的位数,但我假设你没有

这是一个简单的方法;首先你得把台词分开。例如,使用std::istringstream

当您将行拆分为单词时,例如,通过将其迭代器赋给向量,或使用运算符>>读取,您将开始向后检查第一个单词,直到找到任何不是0123456789之一的内容。请注意结尾处的空白。 完成此操作后,您将获得迭代器,了解这些数字从后向结束的位置,并剪切原始字符串,或者如果有机会,剪切已拆分的字符串。瞧!您有自己的项目名称和项目编号

为了记录在案,我将做这整件事,对百分比标记也使用相同的技术,当然例外字符是%

定义有效的\u数字0123456789 定义有效百分比% 结构项数据{ std::字符串名; 整数计数; 双倍价格; 双百分比加价; }; int ExtractItemDatastd::字符串行、ItemData和输出{ std::istringstream流线; std::向量词Stream.begin,Stream.end; 如果Words.size<3{ /*有人给了我们一条格式不正确的线,上面的字不多*/ 返回-1; } //向后搜索,直到找不到任何不是数字0-9或空白的内容 std::size\t StartOfDigits=单词[0]。查找有效数字的\u last\u not\u; 如果StartOfDigits==std::string::npos{ /*错误;您的项目名称无效*/ 返回-2; } 否则{ //把绳子分成两部分 Output.Name=Words[0].substr0,StartOfDigits;//获取第一部分 Output.Count=std::stoi字[0]。数字的substrStartOfDigits,字[0]。长度-StartOfDigits; Output.Price=std::stod字[1]; //从后向搜索,直到找不到任何不是“%”或“%”的内容 std::size\t StartOfPercent=Words[2]。查找有效百分比的\u last\u not\u; Output.PercentMarkup=std::stod Words[2]。substr0,StartOfPercent; } 返回0; } 如果未定义大小,则代码要求包括sstream、vector、string和cstdint

希望答案有用。 祝你好运,科尔达


附:我关于堆栈溢出的第一个答案^^

让我们看看你试过什么。否则,你会要求我们为你编写代码。我很难让读者有任何东西可以使用。请发布您尝试过的内容,并指出失败的地方。我尝试过几种不同的方法-您的意思是获取第一个项目,然后从右侧开始向后搜索,直到找到一个非数字?如果你这样做了,那么你就不会陷入数字与非数字混合的问题。