生活随笔
收集整理的这篇文章主要介绍了
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<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
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; i<len; i++){
int 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;
elsereturn 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; i<hostnames.size(); i++){
vector<string> tmp = split(hostnames[i],
".");namesplit.push_back(tmp);}sort(namesplit.begin(), namesplit.end(), cmp);
for (
int i =
0; i<namesplit.size(); i++){
vector<string> v=namesplit[i];
if (i>
0)
cout <<
"|";
for (
int j =
0; j<v.size(); j++){
if (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<iostream>
#include <math.h>
#include<string>
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;
elsecout << strin <<
'-' << sum << endl;
return 0;
}
1、输入两个字符串,只要两个字符串中都有的字符,区分大小写,则用
'-'替换,其余部分照常输出,不得改变字符位置。
输入:
abc
cddefd
输出:
ab_
_ddefd
#include<iostream>
#include<vector>
#include<string>
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;i<alen;i++){
for(
int j=
0;j<blen;j++){
if(astr[i]==bstr[j]){a[i]=
'_';b[j]=
'_';} }}
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
总结
以上是生活随笔为你收集整理的2018年华为软件岗的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。