当前位置: 首页 > 知识库问答 >
问题:

C++-如何将char*子字符串解析为int?[副本]

孟浩慨
2023-03-14

我正在做一个模拟文件。该文件有许多带有数字,字母和字符的行。

示例:

GR123,7894.5444,A,4687.5643,P
GR456,1234.6556,A,9657.5686,P
GR789,2344.3422,A,9786.8465,P
GR987,6522.6354,A,3245.5754,P

我需要取A和P之前的值(对于第一行,7894.5444和4687.5643)

如何通过将此字符串定位到int中来解析?已经试过了

double exampleA = stoi(row.substr(6,9));
double exampleP = stoi(row.substr(18,9));

但它给出了以下错误:请求“row”中的成员“substr”,该成员为非类类型“char*”

还尝试了:

char exampleA[9];
char exampleP[9];

memcpy(&exampleA, &row[6],sizeof(exampleA));
memcpy(&exampleP, &row[6],sizeof(exampleP));

为了在将值从行中分离出来之后进行转换,但是memcpy缓冲区总是将exampleP的值与exampleA一起带来,如下所示:

A : 7894.5444
P : 4687.5643?7894.5444

共有2个答案

闻人弘雅
2023-03-14

由于数据看起来无论如何都在C字符串中,因此您不妨使用std::strTod,它的优点是不需要您复制子字符串:

char* endp;
double exampleA = std::strtod(row+6, &endp);
double exampleP = std::strtod(row+18, &endp);

在这两种情况下,您可能需要再次检查*endp==','以及是否没有任何转换错误信号。

当然,您可以使用std::strtod,甚至可以使用std::string。这通常是最有效的解决方案。

请注意,strtod是区域设置感知的,因此如果输入与您当前的区域设置不对应(例如,文件使用句点fir小数和逗号作为字段分隔符,而区域设置分别使用逗号和分号),则这可能不起作用。

我不确定你把浮点数转换成整数(截断?四舍五入?乘以10,000?)是什么意思。所以我没有回答这部分问题。

韩麒
2023-03-14

请求“row”中的成员“substr”,该成员为非类类型“char*”

是的,您不能在指针上调用substr。也许您打算将这些内容存储在std::string实例中?

至于你的第二次尝试,你写的东西有很多大问题:

>

  • 您使用的缓冲区长度为9个字节,但示例中最大的缓冲区长度为10个字节(4+1+4+1)。您正在溢出缓冲区并覆盖进程中的随机内存。编辑:如果你写了正确的以空结尾的字符串,你就会被编辑。

    与上述相关的是,因为它在某种程度上隐藏了问题,所以不要使用memcpy复制字符串。更好的第一次尝试是strncpy,将子字符串复制到缓冲区,尽管您仍然必须手动将其终止为空。

    p行显示这两个条目的原因是,您的编译器似乎将examplea放在堆栈上的examplep后面,由一个保护字符分隔,而且由于您没有空终止您的字符串,所以尝试显示examplep会溢出到examplea中,这纯粹是因为运气好,似乎后面跟着一个空字符。

  •  类似资料:
    • 问题内容: 在Python中,如何将像这样的数字字符串解析为对应的浮点值?或者将字符串解析为整数31? 我只想知道如何将解析为,以及(分别)将解析为。 问题答案:

    • 问题内容: 我试图解析一个字符串,以分隔字符串中的列表。我目前有字符串: 有什么方法可以解析字符串,以便字典键是列表的第一个元素,而键的值是元素的下一个。例如: 问题答案: insted的的,你可以有列表: 您可以使用从字符串解析Python数据结构

    • 问题内容: 我有这个字符串:10,692,467,440,017.120(是一个数字)。 我想将其解析为BigDecimal。问题是我没有尝试过DecimalFormat和NumbeFormat。有什么帮助吗? 问题答案: 试试这个 如果要构建具有I18N支持的应用程序,则应使用 还请记住,它可能会引发a,因此您需要处理它(使用try / catch)或引发它,然后让程序的另一部分处理它

    • 问题内容: 我有一个弦 然后,我想将其解析为sqlDate。并将其插入数据库。 是否可以将该字符串解析为sqlDate?!?! 是的,SQL日期格式为“ yyyy-mm-dd” 问题答案: 用于将String日期解析为java.util.Date 然后使用millis将其转换为java.sql.Date

    • 参考文献 如何在JavaScript中将string转换为float?jQuery计算NaN 目标 从用户获取两个数值输入值。把第二个数除以第一个数。将结果乘以100,以百分比表示。将每个数字和结果添加到单个列表中。通过onClick命令调用函数getTextInput()。 背景 我主要和Java一起工作;我目前在一个数据结构班(二年级CS学生)。我的熟练程度是中级的。我对javascript的

    • 问题内容: 如何在Linux内核中将char []转换为int 验证输入的文本实际上是一个int? 问题答案: 在友好的linux源代码树中查看in 的各种形式。 您需要哪种取决于用户是用户还是内核地址,以及您对错误处理/检查缓冲区内容的要求有多严格(诸如,无效或应该返回?)。

    • 显然,有些事情发生了变化,因此我无法从字符串解析i64: 错误:

    • 我将保持这个简短。我正在编写一个模块,它需要比较作为字符串输入的两个大整数(注意:它们很大,但不足以超过Int64边界)。 字符串是填充的,因此选择是采取额外的步骤将其转换为等效的整数,还是将其作为字符串进行比较。 我正在做的是将它们中的每一个都转换为Int64并以这种方式进行比较。但是,我相信字符串比较也可以工作。鉴于我希望它尽可能高效,您对通过以下方式比较整数有什么看法: 或