2014届华为校园招聘机试题2

第一题、输入一个正整数,并编码为字符串进行输出

描述: 1、输入一个正整数,并编码为字符串进行输出。
编码规则为:数字0-9分别编码为字符a-j
2、输入肯定是正整数,不用做错误较验

运行时间限制: 无限制
内存限制: 无限制
输入: 正整数

输出: 字符串

样例输入: 123
样例输出: bcd

#include <iostream>
using namespace std;
void int2str(int n,char* str)
{
    if (str==NULL)
    {
        return ;
    }
    int i=0;
    char temp[20];
    while (n)
    {
        temp[i++]='a'+n%10;
        n/=10;
    }
    temp[i]='\0';
    i--;
    int j=0;
    while (i>=0)
    {
        str[j++]=temp[i--];
    }
  str[j]='\0';
}
void main()
{
    int n;
    cin>>n;
    char a[20];
    int2str(n,a);
    cout<<a<<endl;
}

第二题、
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。

/***************************************************************
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr:  输入字符串
lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例 
输入:“deefd”        输出:“def”
输入:“afafafaf”     输出:“af”
输入:“pppppppp”     输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。

*************************************************************/

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <iterator>
using namespace std;

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    if (pInputStr==NULL||lInputLen<1)
    {
        return;
    }
    int n=0;//用来存储当前pOutputStr一共从pInputStr获得多少元素
    for (int i=0;i<lInputLen;i++)
    {

        if (i==0)
        {
            pOutputStr[n++]=pInputStr[i];
        }
        else
        {
            int flag=0;
            for (int j=0;j<n;j++)
            {
                if (pInputStr[i]==pOutputStr[j])
                {
                    flag=-1;
                    break;
                }
            }
           if (flag==0)
           {
                pOutputStr[n++]=pInputStr[i];
           }

        }
    }
pOutputStr[n]='\0';
}
void stringFilter2(const char *pInputStr, long lInputLen, char *pOutputStr)//lInputLen指不包含'\0'的个数
//第二种写法,来自http://blog.csdn.net/net_assassin/article/details/11660869
{
    bool g_flag[26]={0};
    if (pInputStr==NULL||lInputLen<1)
    {
        return;
    }
    int i=0;
    while (*pInputStr!='\0')
    {
        if (g_flag[*pInputStr-'a'])
        {
            pInputStr++;
        }
        else
        {
        pOutputStr[i++]=*pInputStr;
        g_flag[*pInputStr-'a']=1;
        pInputStr++;
        }
    }
    pOutputStr[i]='\0';

}
//第三种写法
void stringFilter3(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    //  去除重复字符并排序的字符串,这个程序最终对所有的元素重新做了排序,如果没有要求排序,则使用前两种方法。
    if (pInputStr==NULL||lInputLen<1)
    {
        return;
    }
    string str;
    copy(pInputStr,pInputStr+lInputLen,back_inserter(str));
    sort(str.begin(),str.end());
    str.erase(unique(str.begin(),str.end()),str.end());
    strcpy(pOutputStr,str.c_str());


}
//
//void main()
//{
//    char *pInputStr="deefd";
//  long lInputLen=strlen(pInputStr);
//  char *pOutputStr=new char[lInputLen+1];
//  stringFilter(pInputStr,lInputLen,pOutputStr);
//    cout<<"result is"<<endl;
//  cout<<pOutputStr<<endl;
//  delete[] pOutputStr;
//}

void main()
{

    char *pInputStr="abacacde";
    long lInputLen=strlen(pInputStr);
    char *pOutputStr=new char[lInputLen+1];
    stringFilter3(pInputStr,lInputLen,pOutputStr);
    cout<<"result is"<<endl;
    cout<<pOutputStr<<endl;
    delete[] pOutputStr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值