gpt4 book ai didi

c# - 没有字符串拆分的解析

转载 作者:太空狗 更新时间:2023-10-29 21:18:46 24 4
gpt4 key购买 nike

这是 some other question 中讨论的衍生产品.

假设我必须解析大量非常长的字符串。每个字符串包含一个序列 double s(当然是在文本表示中)由空格分隔。我需要解析 double进入 List<double> .

标准解析技术(使用 string.Split + double.TryParse )似乎很慢:我们需要为每个数字分配一个字符串。

我试图用类似 C 语言的旧方法:计算包含数字的子字符串的开头和结尾的索引,并“就地”解析它,而不创建额外的字符串。 (参见 http://ideone.com/Op6h0 ,下面显示了相关部分。)

int startIdx, endIdx = 0;
while(true)
{
startIdx = endIdx;
// no find_first_not_of in C#
while (startIdx < s.Length && s[startIdx] == ' ') startIdx++;
if (startIdx == s.Length) break;
endIdx = s.IndexOf(' ', startIdx);
if (endIdx == -1) endIdx = s.Length;
// how to extract a double here?
}

string.IndexOf 过载,只在给定的子字符串中搜索,但我没有找到从子字符串中解析 double 的方法,而没有先实际提取该子字符串。

有没有人有想法?

最佳答案

没有托管 API 可以从子字符串中解析 double 。我的猜测是,与 double.Parse 中的所有浮点运算相比,分配字符串将是微不足道的。

无论如何,您可以通过创建一个长度为 100 且仅由空格组成的“缓冲区”字符串来保存分配。然后,对于要解析的每个字符串,使用不安全代码 将字符复制到此缓冲区字符串中。您用空格填充缓冲区字符串。对于解析,您可以使用 NumberStyles.AllowTrailingWhite,这将导致尾随空格被忽略。

获取指向字符串的指针实际上是一个完全支持的操作:

    string l_pos = new string(' ', 100); //don't write to a shared string!
unsafe
{
fixed (char* l_pSrc = l_pos)
{
// do some work
}
}

C# 具有将字符串绑定(bind)到 char* 的特殊语法。

关于c# - 没有字符串拆分的解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com