2017 校招华为上机题
1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母, a 换成b,z 换成a,Z 换成A,如aBf 转换成bCg,字符串内的其他字符不改变,给定函数,编写函数
void Stringchang(const char*inpu,char*output)
其中input 是输入字符串, output 是输出字符串
#include<iostream>
#include<cctype>
#include<cstring>
using namespace std;
void stringchang(const char*, char*);
int main()
{
char input,output; //不用再使用for循环来输入字符串数组了
getline(cin,input); //可以直接使用getline()的方法既可以直接输入字符串数组,也可以直接输入string类对象
stringchang(input,output);
cout<<output<<endl;
return 0;
}
void stringchang(const char* input, char* output)
{
int m=strlen(input),n=0;
for(int i=0;i<m;i++)
{
if (isalpha(input))
{
if (input== 'z')
output= 'a';
else if (input== 'Z')
output= 'A';
else
output=input+1;
}
else
output=input;
}
output= '\0';
}
2. 比较一个数组的元素是否为回文数组
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin,str); //使用getline的方法直接将string类对象直接输入,不用再考虑1个1个输入了
int m=str.size();
for(int i=0;i<m/2;i++)
{
if (str!=str)
{
cout<<"NO" <<endl;
return 0;
}
}
cout<<"YES" <<endl;
return 0;
}
3.判断回文数,是返回1,不是返回0。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int num;
cin>>num;
string str;
while (num>0)
{
str.push_back(num%10+'0');
num/=10;
}
int m=str.size();
for(int i=0;i<m/2;i++)
{
if (str!=str)
{
cout<< "0" <<endl;
return 0;
}
}
cout<<"1" <<endl;
return 0;
}
4.通过键盘输入一串小写字母(a~z) 组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的
字符,将非首次出现的字符过滤掉。
比如字符串“ abacacde”过滤结果为“ abcde”。
示例
输入:“ deefd” 输出:“ def ”
输入:“ afafafaf ” 输出:“ af ”
输入:“ pppppppp” 输出:“ p”
#include<iostream>
#include<string>
using namespace std;
int main()
{
string in_str,out_str;
cin>>in_str;
for(int i=0;i<n;i++)
{
int count=0;
for(int j=0;j<i;j++)
{
if(in_str ==in_str)
{
count++;
}
}
}
if(count==0)
{
out_str.push_back(in_str);
}
cout<<out_str<<endl;
return 0;
}
5.利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。
测试样例 "aabcccccaaa"
返回:"a2b1c5a3"
"welcometonowcoderrrrr"
返回:"welcometonowcoderrrrr"
class Zipper {
public:
string zipString(string iniString)
{
string res;
for(int i = 0; i < iniString.length() - 1; i++)
{
int count = 1;
while(iniString == iniString) //和上一题类似,其实也可以用两个for循环,但就需要定义两个i,j变量,
{
++count; //其实while=for+if,这样就可以只用1个变量。
++i; //所以典型的结构:for+for+if=for+while
}
res.push_back(iniString);
res+=to_string(count);
}
return iniString.size() >= res.size() ? res :iniString;
}
};
6.数组中数字都两两相同,只有一个不同,找出该数字:
#include<iostream>
using namespace std;
int main() //用异或,相同的话为0,0异或一个数等于他本身
{
int num,n=-1;
while (cin>>num[++n]);
{
int temp=num;
for(int i=1;i<n;i++)
temp=temp^num;
}
10 cout<<temp<<endl;
11 return 0;
}
7.数组中数字两两相同,有两个不同,找出这两个
#include<iostream>
using namespace std;
int main()
{
int num,n=-1,a,flag=0,m=0;
while(cin>>num[++n]);
for(int i=0;i<n;i++)
{
flag=0;
for(int j=0;j<n;j++)
{
if (i!=j&&num==num)
flag=1;
}
if (flag==0)
a=num;
if (m==2)
break;
}
cout<<a<< " " <<a<<endl;
return 0;
}
页:
[1]