2018年华为软件岗

主机名由多级域名组成,自右向左,依次是顶级域名、二级域名、三级域名,例如huawei.com.cn,cn是顶级域名,com是二级域名,huawei是
三级域名。
请编写一段程序,实现主机名排序功能,排序规则以及限制条件如下:
1、主机名按照域名等级排序,即先顶级域名排序,再二级域名排序,最后是三级域名排序;
2、每一级域名排序时,参考字典顺序定义,abc 排在 abf,abc 排在 abcd 前。
3、输入的主机名确保符合以下规则
A、主机名以字符串形式给出,连续的两个主机名,以’|’符号分开;
B、主机名中仅包含小写英文字母和分隔符’.’;
C、主机名中没有连续的’.’,不以’.’开始,也不以’.’结束;
D、主机名不存在重复。
输入
输入为字符串,包含多个主机名,主机名之间以’|’符号分开。
输出
输出为经过排序后的字符串,主机名之间以’|’符号分开。
样例输入
huawei.com.cn|mail.huawei.com|imail.huawei.com|cctv.com.cn|bctv.com.cn

样例输出
cctv.com.cn|huawei.com.cn|imail.huawei.com|mail.huawei.com
cctv.com.cn|huawei.com.cn|imail.huawei.com|mail.huawei.com

第三题:主机名排序

#include
#include
//#include
#include
#include
using namespace std;

vector<string> split(const string &s, const string &seperator){
    vector<string> result;
    typedef string::size_type string_size;
    string_size i = 0;

    while (i != s.size()){
        //找到字符串中首个不等于分隔符的字母;
        int flag = 0;
        while (i != s.size() && flag == 0){
            flag = 1;
            for (string_size x = 0; x < seperator.size(); ++x)
            if (s[i] == seperator[x]){
                ++i;
                flag = 0;
                break;
            }
        }

        //找到又一个分隔符,将两个分隔符之间的字符串取出;
        flag = 0;
        string_size j = i;
        while (j != s.size() && flag == 0){
            for (string_size x = 0; x < seperator.size(); ++x)
            if (s[j] == seperator[x]){
                flag = 1;
                break;
            }
            if (flag == 0)
                ++j;
        }
        if (i != j){
            result.push_back(s.substr(i, j - i));
            i = j;
        }
    }
    return result;
}
bool cmp(const vector<string> &a, const vector<string> &b){
    bool flag = false;//默认由大到小输出>
    int lena = a.size();
    int lenb = b.size();
    int len = min(lena, lenb);
    for (int i = 0; iint resul = strcmp(a[lena - 1 - i].c_str(), b[lenb - 1 - i].c_str());
        if ((i == len - 1) && (resul == 0)){//某一个主机名是另一个主机名的一部分时
            if (len == lena)
                return true;
            else
                return false;
        }
        if (resul>0)
            return false;
        if (resul<0)
            return true;
    }
    return flag;
}
int main(){
    string str;
    cin >> str;
    vector<string> hostnames = split(str, "|");

    vector<vector<string>> namesplit;
    for (int i = 0; ivector<string> tmp = split(hostnames[i], ".");
        namesplit.push_back(tmp);
    }
    sort(namesplit.begin(), namesplit.end(), cmp);
    for (int i = 0; ivector<string> v=namesplit[i];
        if (i>0)
            cout << "|";
        for (int j = 0; jif (j>0)
                cout << ".";
            cout << v[j];
        }
    }
    return 0;
}
2、计算出版书的出版号,正确的出版号有4部分:x-xxx-xxxxx-x。第一部分是语言,第二部分是出版商的编号,第三部分是出版书籍的编号,第四部分是验证码,中间用分割符-分开。前123部分是数字0-9组组成的,第四部分是验证码:是前面9位数字,第一位*1+第二位*2+第三位+3+。。。第九位*9,最后的结果mod11,如果得到的是10,就让验证码为x。最后输出整个出版号。
输入:
x-xxx-xxxxx
输出:
如果输入不正确,输出error。
否则输出:
x-xxx-xxxxx-x
#include
#include 
#include
using namespace std;
int main(){
    string strin;
    cin >> strin;
    if (strin.length() != 11){
        cout << "ERROR" << endl;
        return 0;
    }
    long long sum = 0;
    int num = 0;
    int count = 1;
    for (int i = 0; i<11; i++){
        if ((i != 1) && (i != 5)){
            num = strin[i] - '0';
            if (num>9 || num<0){
                cout << "ERROR" << endl;
                return 0;
            }
            sum += num*count;
            count++;
        }
    }
    sum = fmod(sum, 11);
    if(sum==10)
        cout << strin << '-' << 'X' << endl;
    else
        cout << strin << '-' << sum << endl;
    return 0;
}
1、输入两个字符串,只要两个字符串中都有的字符,区分大小写,则用'-'替换,其余部分照常输出,不得改变字符位置。
输入:
abc
cddefd
输出:
ab_
_ddefd

#include
#include
#include
using namespace std;
int main(){
    string astr;
    cin>>astr;
    string a(astr) ;
    string bstr;
    cin>>bstr;
    string b(bstr);
    int alen=astr.length();
    int blen=bstr.length();
    for(int i=0;ifor(int j=0;jif(astr[i]==bstr[j]){
                a[i]='_';
                b[j]='_';
            }                
        }
    }
    cout<cout<return 0;
}

你可能感兴趣的:(编程)