首页 > 其他分享 >从字符串里面解析数组

从字符串里面解析数组

时间:2024-08-14 10:43:11浏览次数:9  
标签:std unorderMap include token num result 数组 字符串 解析

需求,从一个字符串里面,解析出一个数组。

例如:

“1,2,3,4,5”,

"1-5",

"1,2,4",

"5-10,

12,13"

能正常解析出一个数组出来。字符串里面,支持“,”, "-" 2种用法。

 

#include <iostream>  
#include <string>  
#include <vector>  
#include <sstream>  
#include <unordered_map>
  
std::vector<int> parseStringToInts(const std::string& input) {  
    std::vector<int> result;  
    std::string token;  
    std::stringstream ss(input);  
    std::unordered_map<int, int> unorderMap;//去重判断
  
    while (std::getline(ss, token, ',')) {  
        // 检查是否包含'-',表示范围  
        size_t dashPos = token.find('-');  
        if (dashPos != std::string::npos) {  
            // 提取范围的两个数字  
            int start, end;  
            std::stringstream startStream(token.substr(0, dashPos));  
            std::stringstream endStream(token.substr(dashPos + 1));  
            if (startStream >> start && endStream >> end && start <= end) {  
                // 添加范围内的所有数字  
                for (int i = start; i <= end; ++i) {  
                    if(unorderMap.find(i) == unorderMap.end()){
                        result.push_back(i);  
                        unorderMap[i] = 1;
                    }
                }  
            }  
        } else {  
            // 否则,尝试将token转换为整数  
            int num;  
            if (std::stringstream(token) >> num) {  
                if(unorderMap.find(num) == unorderMap.end()){
                    result.push_back(num);  
                    unorderMap[num] = 1;
                }
            }  
            // 如果转换失败,忽略此token(可选,取决于你的需求)  
        }  
    }  
  
    return result;  
} 


// 测试示例  
void testFun(const std::string& strIds){
    std::cout<<"=======================\r\ntestFun strIds:"<<strIds<<std::endl;
    std::vector<int> result; 
    result = parseStringToInts(strIds);  
    for (int num : result) {  
        std::cout << num << " ";  
    }  
    std::cout << std::endl;  
}

  
int main() {  
    testFun("1,2,3,4,5");
    testFun("1-5");
    testFun("1,3,5,7");
    testFun("1,3,5-6,7,9");
    testFun("");
    testFun("1-5,8");
    testFun("1-,8");
    testFun("-2,8");
    testFun("8-8,8");
    testFun("8-3");
    testFun("-2");
    testFun("1-4,6-8");
    testFun("1-3,6,7,9-10");
    testFun("6,7,9-10,18");
    testFun("a");
    testFun("b");
    testFun("0-5");
    return 0;  
}

 

标签:std,unorderMap,include,token,num,result,数组,字符串,解析
From: https://www.cnblogs.com/music-liang/p/18358372

相关文章

  • 3152. 特殊数组 II
    3152.特殊数组II题目链接:3152.特殊数组II代码如下:classSolution{public:vector<bool>isArraySpecial(vector<int>&nums,vector<vector<int>>&queries){vector<int>d(nums.size());//std::iota(numbers.......
  • 边缘计算技术解决行业痛点,TSINGSEE智能分析网关V4技术特点与应用场景解析
    一、行业背景随着人工智能(AI)技术的飞速发展,边缘计算硬件作为其核心组成部分,正逐步成为市场的新宠。这些硬件不仅提升了数据处理和分析的效率,还极大地降低了数据传输的延迟,为各行各业的智能化转型提供了有力支持。1、痛点1)传统企业智能化不足,海量的数据缺乏实时性的服务,网络负......
  • 全解析:华为云初创计划申请流程
    【若您对以下内容感兴趣,欢迎关注或联系我们】在当今数字化的浪潮中,华为云初创计划为众多初创企业提供了宝贵的发展机遇。(包括代金券、技术支持、商业资源等)但要顺利搭上这趟发展的快车,了解其申请流程至关重要。以下为您详细介绍华为云初创计划的常规申请流程(需注意不同渠道和......
  • 【开端】Java中Log级别和解析
    一、绪论Java系统中需要对日志进行输出,方便定位系统访问信息,系统报错信息,用于排查系统问题等。我们常常使用的日志有一下一些级别publicinterfaceLog{ booleanisDebugEnabled(); booleanisTraceEnabled(); voiderror(Strings,Throwablee); voiderror(......
  • 字符串及转义字符
    字符串在c语言中形如‘a' ’b' ‘c'等单个字母被命名为字符常量而形如“abcdef”等则被命名为字符串在c语言中,有整形,单精度浮点数,字符数据类型但却没有字符串类型所以在初始化字符串时与初始化字符相同列:charch=’w‘   chararr[10]尤为注意的是在[ ]......
  • DHU OJ 二维数组 n 层正方形
     思路及代码//n个数s=2n-1/*1111112221123211222111111*///num1row(1,1)->(1,5),(5,1)->(5,5);column(1,1)->(5,1),(1,5)->(5,5)//num2row(2,2)->(2,4),(4.2)->(4,4);column(2,2)->(4,2),(2,4)->(4,4)//num3row(3,3)-......
  • DHU OJ 二维数组 杨辉三角
    思路及代码//inputT,int1<=<=20//inputT组n#include<iostream>usingnamespacestd;intmain(){intT;cin>>T;intn;//createn=20杨辉三角int**p=newint*[20];for(inti=0;i<=19;i++){p[i]=new......
  • 代码随想录算法训练营第二十八天 | 122.买卖股票的最佳时机II , 55. 跳跃游戏 , 45.跳跃
    目录122.买卖股票的最佳时机II 思路方法一:贪心方法二:动态规划55.跳跃游戏思路方法一:使用while循环方法二:使用for循环45.跳跃游戏II 思路方法一方法二方法一:贪心方法一方法二:贪心方法二 方法三:贪心方法三心得体会1005.K次取反后最大化的数组和思路方法......
  • 长度最小的子数组 滑动窗口法(双指针) 解决
    给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例1:输入:target=7,nums=[2,3,1,2,4,3]......
  • Java数组06:常见排序算法
    1.冒泡排序冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完......