IP地址(Acwing3634)

发布时间:2024年01月15日

输入一串字符,判断该字符串是否为点分十进制的 IP 地址,若是则转换为 16
进制输出,否则输出 Error。

输入格式
一行字符串。

注意,输入可能是任意的一个字符串,比如 abc.bas.fefe.4r4 或者 23.23.11.23.123 这都是不合法的 IP 地址。

输出格式
按题目要求,输出一行结果。

数据范围
输入字符串长度不超过 100。

输入样例1:
192.41.6.20
输出样例1:
0xC0290614
输入样例2:
257.32.23.1
输出样例2:
Error
难度:简单
来源:贵州大学考研机试题(Acwing:https://www.acwing.com/)

代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;



bool check(string s)
{
    int cnt = 0;
    int cnt1 = 0;
    for(int i=0;i<s.size();i++)
    {
        if(isalpha(s[i])) return false;
        
        if(s[i] == '.') cnt++;
        
        if(isdigit(s[i]))
        {
            cnt1++;
            int j = i;
            int x = 0;
            while(j<s.size() && isdigit(s[j]))
            {
                x = x * 10 + s[j] - '0';
                j++;
            }
            
            if(x > 255) return false;
            i = j - 1;
        }
        if(s[i] != '.' && !isdigit(s[i]) && !isalpha(s[i])) return false;
    }
    if(cnt != 3 || cnt1 != 4) return false;
    
    
    return true;
}

string trans(int n)
{
    int x = 0;
    string ss,c;
    if(n == 0) ss = "0";
    while(n != 0)
    {
        x = n % 16;
        if(x<10) c = x + '0';
        else
        {
            c = x + 'A' - 10;
        }
        
        ss = c + ss;//逆序
        
        n = n / 16;
    }
    
    return ss;
}

int main()
{
    string s;
    cin>>s;
    string anss = "0x";
    if(check(s))
    {
        for(int i=0;i<s.size();i++)
        {
            if(isdigit(s[i]))
            {
                int j = i;
                int x = 0;
                while(j<s.size() && isdigit(s[j]))
                { 
                    x = x * 10 + s[j] - '0';
                    j++;
                }
                i = j - 1;
                string ss = trans(x);
                //cout<<ss<<endl;
                if(ss.size()<2) ss = '0' + ss;
                
                //cout<<ss<<endl;
                anss += ss;
            }
        }
        cout<<anss<<endl;
    }
    else
    {
        cout<<"Error"<<endl;
    }
    
    return 0;
}
文章来源:https://blog.csdn.net/whdehcy/article/details/135606405
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。