第一题是my.ABC转化为_MY_ABC_之类的
#include<iostream>
#include<string>
using namespace std;
#define MAXLEN 1000
void trans(string input)
{
if(input.size() <= 0)
return;
char res[MAXLEN];
res[0]='_';
int k=1;
for(int i=0; i<input.size(); i++)
{
if(input[i]>='a'&&input[i]<='z')
{
if(i>0&&input[i-1]>='0'&&input[i-1]<='9')
{
res[k++]='_';
res[k++]=input[i]-32;
}
else
{
res[k++]=input[i]-32;
}
}
else if(input[i]>='A'&&input[i]<='Z')
{
if(i>0&&input[i-1]>='A'&&input[i-1]<='Z')
{
if(i<=input.size()-2&&input[i+1]>='a'&&input[i+1]<='z')
{
res[k++]='_';
res[k++]=input[i];
}
else
{
res[k++]=input[i];
}
}
if(i==0)
{
res[k++]=input[i];
}
if(i>0&&!(input[i-1]>='A'&&input[i-1]<='Z'))
{
if(input[i-1]=='.')
{
res[k++]=input[i];
}
else
{
res[k++]='_';
res[k++]=input[i];
}
}
}
else if(input[i]>='0'&&input[i]<='9')
{
if((i>0&&(input[i-1]=='.'||input[i-1]>='0'&&input[i-1]<='9')) || i==0)
{
res[k++]=input[i];
}
else
{
res[k++]='_';
res[k++]=input[i];
}
}
else if(input[i]=='.')
{
res[k++]='_';
}
}
if(res[k-1]!='_')
res[k++]='_';
res[k]='\0';
string ans(res);
cout << ans << endl;
}
int main()
{
string input;
while(cin>>input)
{
trans(input);
}
return 0;
}
第二题是路径匹配输出最大匹配ID,做的时候那个输入坑了我好一会,搞到我没法ac
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
vector<int> getRes(vector<string> src, vector<string> pattern, map<string, int> mymap)
{
vector<int> res;
for(int i=0; i<pattern.size(); i++)
{
int max = 0;
for(int j=0; j<src.size(); j++)
{
int begin = -1;
if((begin=pattern[i].find(src[j]))!=string::npos)
{
if(begin==0&&begin+src[j].size()<=pattern[i].size()-1&&pattern[i][begin+src[j].size()]=='/'||begin+src[j].size()>=pattern[i].size())
{
if(max<mymap[src[j]])
max = mymap[src[j]];
}
}
}
res.push_back(max);
}
return res;
}
int main()
{
vector<string> src;
vector<string> pattern;
map<string, int> mymap;
string tmp;
int flag=1;
while(cin>>tmp)
{
if(tmp!="-")
{
if(flag==1)
{
int tmp2;
cin >> tmp2;
src.push_back(tmp);
mymap[tmp]=tmp2;
}
else
{
pattern.push_back(tmp);
}
}
else
{
flag=2;
}
}
vector<int> res = getRes(src, pattern, mymap);
for(int i=0; i<res.size(); i++)
cout << res[i] << endl;
return 0;
}
第三题是密码破译,没时间做,考试结束后搞出来了一个解法
#include <bits/stdc++.h>
using namespace std;
int char2int(char c)
{
return c-'0';
}
void dfs(const string& s, int start, vector<string>& ans, string& path)
{
if(start == s.length())
{
ans.push_back(path);
return;
}
// for(size_t i = start; i < s.length(); ++i)
// {
int i = start;
char ch;
if(i < s.length() - 1)
{
int num = char2int(s[i])*10 + char2int(s[i+1]);
if(num <= 26)
{
ch = 'a' + num - 1;
//cout << step++ << " start = "<< start << " ch1 = " << ch << endl;
path.push_back(ch);
dfs(s, i+2, ans, path);
path.pop_back();
}
ch ='a' + char2int(s[i]) - 1;
//cout << step++ << " start = "<< start << " ch2 = " << ch << endl;
path.push_back(ch);
dfs(s, i+1, ans, path);
path.pop_back();
} else {
ch = 'a' + char2int(s[i]) - 1;
//cout << step++ << " start = "<< start << " ch3 = " << ch << endl;
path.push_back(ch);
dfs(s, i+1, ans, path);
path.pop_back();
}
//}
}
vector<string> fun(string& s)
{
vector<string> ans;
string path;
dfs(s, 0, ans, path);
sort(ans.begin(), ans.end());
return ans;
}
int main(){
string num;
while(cin >> num)
{
vector<string> ans = fun(num);
for(auto i : ans)
cout << i <<" ";
cout << endl;
}
return 0;
}
我想问一个问题,为啥客户端开发的编程输入输出都搞好了,只需要像leetcode那种写个函数就行了,服务端整这么一出,尤其是第二题。