C# 循环截取字符串的问题

多组字符串:
string result = "219.9332580.00486150.0000000.304833";
或者
string result = "0.1512640.0089790.0000000.001125";
随便两组把字符串,这里面实际是4个float拼成,我想解决的问题就是把他们4个拆出来:
1组:
str1 = 219.933258
str2 = 0.004861
str3 = 50.000000
str4 = 0.304833
2组:
str1 = 0.151264
str2 = 0.008979
str3 = 0.000000
str4 = 0.001125
拆成这样,循环里面不会写了,思路是找到".",然后截取,因为小数点后面6位是固定位,但是整数位不固定,有可能整数位分别是12345位都有可能,这样的字符串应该怎么拆解呢

可以通过 std::string 类提供的 findsubstr 方法来实现拆解字符串的功能。具体步骤如下:

  1. 定义一个字符串变量 result,并初始化为待分割的字符串。

    std::string result = "219.9332580.00486150.0000000.304833";
    
  2. 创建一个循环来遍历每一个浮点数字符串。每次循环都需要记录当前的子串的起点和长度。

    int start = 0, len = 0;   // 记录子串的起点和长度
    for (int i = 0; i < 4; i++) {
     // 遍历每一个浮点数字符串
    }
    
  3. 在每次循环中,先从 start 开始搜索下一个小数点的位置,然后计算出子串的长度。

    size_t dot_pos = result.find(".", start);  // 从 start 开始搜索小数点位置
    len = dot_pos + 7 - start;
    
  4. 使用 substr 方法截取子串,并将 start 更新为下一个子串的起点位置。

    std::string sub = result.substr(start, len);
    start += len;   // 下一个子串的起点位置为当前子串的末尾位置
    

完整代码如下:

#include <iostream>
#include <string>

int main() {
    std::string result = "219.9332580.00486150.0000000.304833";

    int start = 0, len = 0;
    for (int i = 0; i < 4; i++) {
        size_t dot_pos = result.find(".", start);
        len = dot_pos + 7 - start;

        std::string sub = result.substr(start, len);
        start += len;

        std::cout << "str" << i+1 << "=" << sub << std::endl;
    }

    return 0;
}

输出结果为:

str1=219.933258
str2=0.004861
str3=50.000000
str4=0.304833

正则测试

img


代码生成:

img