lbdbzj110 发表于 2017-7-10 18:03:01

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]
查看完整版本: 2017 校招华为上机题