c++ string 解析ip

比如输入是192.168.80.12-15,解析成192.168.80.12、192.168.80.13、192.168.80.14、192.168.80.15;

亦或192.168.10.10-192.168.10.12,解析成192.168.10.10、192.168.10.11、192.168.10.12

复制代码
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <fstream>

void ReadDataFromFile(std::string& filename, std::vector<std::string>& lines_feat) {
    std::ifstream vm_info(filename.c_str());
    std::string lines;

    lines_feat.clear();

    while(!vm_info.eof()) {
        getline(vm_info, lines);
            if(lines.empty())
                break;

            lines_feat.push_back(lines);
    }
}

std::vector<std::string> split(const std::string& s, char& delimiter) {
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream(s);

    while(std::getline(tokenStream, token, delimiter)) {
        tokens.push_back(token);
    }
    return tokens;
}

int stringtoint(const std::string& s) {
    std::istringstream iss(s);

    int num;

    return iss>>num?num:0;
}

/*处理IP格式为:192.168.125.10-192.168.125.100*/
void printip2(const std::string& s) {
    std::vector<std::string> temp, ip_segment, ip_end_v;

    temp=split(s, '-');

    ip_segment=split(temp.front(), '.');
    ip_end_v=split(temp.back(), '.');

    std::string ip_start=ip_segment.back(), ip_end=ip_end_v.back();
    int start=stringtoint(ip_start);
    int end=stringtoint(ip_end);

    for(size_t i=start; i<=end; ++i) {
        std::cout<<ip_segment[0]<<"."<<ip_segment[1]<<"."<<ip_segment[2]<<"."<<i<<"\n";
    }

}

/*处理IP格式为:192.168.125.10-100*/
void printip(const std::string& s) {
    std::vector<std::string> temp, ip_segment;

    temp=split(s, '-');
    ip_segment=split(temp.front(), '.');

    std::string ip_start=ip_segment.back(), ip_end=temp.back();
    int start=stringtoint(ip_start);
    int end=stringtoint(ip_end);

    for(size_t i=start;i<=end;++i) {
        std::cout<<ip_segment[0]<<"."<<ip_segment[1]<<"."<<ip_segment[2]<<"."<<i<<"\n";
    }

}

int main() {
    std::string file_path("vm.data");
    std::vector<std::string> ip_vec;

    ReadDataFromFile(file_path, ip_vec);
    for(std::vector<std::string>::const_iterator it=ip_vec.begin();it!=ip_vec.end();++it) {
        printip2(*it);
    }

    return 0;
}
复制代码

 

posted @   东宫得臣  阅读(399)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示