Amazon电面题目-sort 100 IP addresses

本文提供了一段使用C++语言解决排序非法IP并验证有效性的代码实现,通过自定义比较函数检查IP的有效性,并将无效IP移至列表末尾,最后对有效IP进行排序。

第一次面试,有点紧张,犯了许多错误,电面就挂了。回头题目自己写下。不知道对不对。

题目:排序100个IP地址,其中可能有非法的IP(例如:192.168.2.1.11 ,192.256.7.1,192.010.2.1)

#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>


using namespace std;


//s1<s2 true.  s1>=s2 false
bool myCmp(string s1, string s2){
    if(s1 == s2)
        return false; //


    stringstream ss;
    string w1, w2;    
    ss << s1;
    getline(ss, w1, '.');
    ss >> s1;    
    ss.str("");
    ss.clear();   
    ss << s2;
    getline(ss, w2, '.');
    ss >> s2;
    
    int i1 = atoi(w1.c_str());
    int i2 = atoi(w2.c_str());
    
    if(i1 != i2)
        return i1 < i2;
    //else w1==w2, recure
    return myCmp(s1, s2);
}


bool check(string s){
    int n = s.size();
    //smallest 0.0.0.0  biggest 255.255.255.255
    if(n > 15 || n < 7)
        return false;
    stringstream ss;
    ss << s;
    int part = 0;
    while(getline(ss, s, '.')){
        part++;
        int i = atoi(s.c_str());
        //more than 4 parts, out of[0,255], has 0xx string
        if(part > 4 || i < 0 || i > 255 || s.size() > 1 && s[0] == '0')
            return false;           
    }
    //less than 4 parts
    return part == 4;    
}


void sortIP(vector<string> &IPs){
    //check valid, move invalid ip to the end
    vector<string>::iterator r = IPs.end() - 1;
    vector<string>::iterator l = IPs.begin();
    while(l <= r){
        if(check(*l))
            l++;
        else{
            swap(*l, *r);//*l = *r;
            r--;            
        }            
    }//if all ip are invalid r=-1
    
    //sort valid ip [begin(), r + 1) 
    sort(IPs.begin(), r + 1, myCmp);   
}


int main(){
    vector<string> IPs;
    IPs.push_back("123.4.245.23");
    IPs.push_back("104.244.253.29");
    IPs.push_back("255.255.255.255");
    IPs.push_back("255.255.255.257");
    IPs.push_back("1.198.3.93");
    IPs.push_back("32.183.93.40");
    IPs.push_back("104.30.244.2");
    IPs.push_back("104.244.4.101");
    IPs.push_back("1.0.0.1");
    IPs.push_back("1.0.0.0");
    IPs.push_back("01.0.0.0");
    IPs.push_back("255.192.255");
    IPs.push_back("00.0.0.0");
    IPs.push_back("0.1.0.0");
    IPs.push_back("0.1.0.0.0");
    IPs.push_back("104.244.4.29");
    
    sortIP(IPs);
    for(int i = 0; i < IPs.size(); ++i)
            cout << IPs[i] << endl;
  
    system("pause");
}

<think>我们正在讨论的是MikroTik路由器的Winbox配置。用户提到在IP -> Addresses下看到空的列表,这意味着没有为任何接口配置IP地址。在搭建PPPoE服务器时,通常需要为内网接口配置IP地址(作为PPPoE服务器的本地地址),或者直接在PPPoE服务器配置中指定Local Address。 但是,用户可能已经按照之前的方式在PPPoE服务器配置中直接设置了Local Address(如192.168.100.1),所以即使Addresses列表为空,PPPoE服务器仍然可以运行,因为PPPoE服务器的Local Address可以独立设置。 不过,为了确保PPPoE服务器能够正常工作,我们需要确认PPPoE服务器的配置中已经指定了Local Address。另外,如果PPPoE客户端需要访问本地网络资源,可能还需要为物理接口配置一个IP地址(虽然PPPoE服务器可以不依赖于此)。 因此,我们需要指导用户如何在没有配置接口IP地址的情况下,检查PPPoE服务器的配置,并确保PPPoE服务器正常运行。 回答步骤: 1. 解释为什么Addresses列表可能是空的,但PPPoE服务器仍可能运行。 2. 指导用户检查PPPoE服务器配置中的Local Address(在PPP -> PPPoE Servers中)。 3. 如果确实需要为接口配置IP地址,指导如何添加(但强调不是必须,因为PPPoE服务器可以独立设置Local Address)。 4. 提出相关问题。 注意:用户的问题是如何查看PPPoE服务器的IP,而我们已经知道有两种方式(PPPoE Servers实例和PPP Profiles),现在用户发现Addresses是空的,所以我们需要说明这个情况。 回答结构: - 首先说明情况:Addresses列表为空并不影响PPPoE服务器的运行,因为PPPoE服务器的IP可以在PPPoE服务器配置中单独设置。 - 然后指导用户如何查看PPPoE服务器配置中的Local Address(通过PPP -> PPPoE Servers)。 - 如果用户需要为接口配置IP,给出简单步骤(但这不是必须的,因为PPPoE服务器已经指定了Local Address,所以这一步可选,但为了完整性可以提一下)。 注意:用户可能已经按照之前的步骤配置了PPPoE服务器,所以应该先检查PPPoE服务器配置。 最后,根据这个情况提出相关问题。</think>### Winbox中Addresses列表为空时的PPPoE服务器IP配置指南 #### 原因分析与解决方案 1. **正常情况说明** Addresses列表为空**不影响PPPoE服务运行**,因为PPPoE服务器的IP地址是通过以下方式独立设置的: ```winbox PPP → PPPoE Servers → 双击您的服务器实例 ``` 在"General"标签页中直接配置"Local Address"(如192.168.100.1) 2. **手动添加接口IP(可选)** 若需为物理接口添加IP: ```winbox IPAddresses → "+" Address: 192.168.100.1/24 # 与PPPoE服务器IP同网段 Network: 192.168.100.0 Interface: 选择内网接口(如ether2) ``` 3. **验证PPPoE服务器IP** ```winbox # 命令行快速查看 /interface pppoe-server server print # 输出结果中查找"local-address"字段 ``` #### 配置关系图解 ``` PPPoE服务器IP (虚拟) │ ├─ 通过 PPP > PPPoE Servers 直接设置 │ └─ 物理接口IP (可选) └─ 通过 IP > Addresses 添加 ``` > **关键提示**:即使Addresses列表为空,只要在PPPoE服务器配置中设置了"Local Address",客户端仍可正常拨号获取IP
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值