发布于 2014-09-25 06:20:01 | 218 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

华为

华为技术有限公司是一家生产销售通信设备的民营通信科技公司,总部位于中国广东省深圳市龙岗区坂田华为基地。华为的产品主要涉及通信网络中的交换网络、传输网络、无线及有线固定接入网络和数据通信网络及无线终端产品,为世界各地通信运营商及专业网络拥有者提供硬件设备、软件、服务和解决方案。华为于1987年在中国深圳正式注册成立。


本文为大家提供了一份华为2012年的校园招聘软件工程师的面试题,感兴趣的同学参考下。

1、
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
 
要求实现函数:
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
 
【输入】 pInputStr:  输入字符串
         lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
 
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
 
示例
输入:“deefd”        输出:“def”
输入:“afafafaf”     输出:“af”
输入:“pppppppp”     输出:“p”
 
 
2、
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
 
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
 
【输入】 pInputStr:  输入字符串
         lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
 
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
 
示例
输入:“cccddecc”   输出:“3c2de2c”
输入:“adef”     输出:“adef”
输入:“pppppppp” 输出:“8p”
 
 
3、
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
 
补充说明:
1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“0”。
 
要求实现函数:
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
 
【输入】 pInputStr:  输入字符串
         lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
 
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
 
示例
输入:“4 + 7”  输出:“11”
输入:“4 - 7”  输出:“-3”
输入:“9 ++ 7”  输出:“0” 注:格式错误

 

下面是答案参考:

#include <iostream>
using namespace std;

// 用于测试结果
void print(char *pOutputStr)
{
    char *p = pOutputStr;
    while(p != NULL && *p != 0)
    {
        cout << *p ;
        ++p;
    }
    cout << endl;
}

/************************************************************************/
/*
编程题第一题
*/
/************************************************************************/
/*
【输入】 pInputStr:  输入字符串
lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
*/
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    bool table[26] = {false};
    long k = 0;
    for(long i = 0; i < lInputLen; ++i)
    {
        char c = pInputStr[i];
        if(table[c-'a'] == false)
        {
            pOutputStr[k++] = c;
            table[c-'a'] = true;
        }
    }
    pOutputStr[k] = 0;
}

 

/************************************************************************/
/*
编程题第二题
*/
/************************************************************************/
/*
【输入】 pInputStr:  输入字符串
lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
*/

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    long repeat = 1;
    long k = 0;
    for(long i = 0; i < lInputLen; ++i)
    {
        char c = pInputStr[i];
        if(i + 1 < lInputLen && c == pInputStr[i + 1])
        {
            ++ repeat;
        }
        else
        {
            // 写入
            if(repeat != 1)
            {    
                // 当心repeat超过9的情况
                
                char temp[100];
                itoa(repeat, temp, 10);
                int ii = 0;
                while(temp[ii])
                {
                    pOutputStr[k++] = temp[ii++];
                }        
            }
            pOutputStr[k++] = c;
            repeat = 1;
        }
    }
    pOutputStr[k] = 0;
}

/************************************************************************/
/*
编程题第三题
*/
/************************************************************************/
/*
【输入】 pInputStr:  输入字符串
lInputLen:  输入字符串长度         
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
*/
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    pOutputStr[0] = '0';
    pOutputStr[1] = 0;
    if(!pInputStr)
    {
        return;
    }
    // 获得第一个操作数
    int operand1 = 0;
    long index = 0;
    while(pInputStr[index] >= '0' && pInputStr[index] <= '9')
    {
        operand1 = operand1 * 10 + (pInputStr[index++] - '0');
        if(index >= lInputLen) return;
    }
    if(pInputStr[index++] != ' ' || index >= lInputLen)
    {
        return;
    }
    // 获得操作符
    char oper;
    if(pInputStr[index] == '+' || pInputStr[index] == '-')
    {
        oper = pInputStr[index++];
    }
    else
    {
        return;
    }
    if(index >= lInputLen || pInputStr[index++] != ' ')
    {
        return;
    }
    if(index >= lInputLen) return;
    // 获得第二个操作数
    int operand2 = 0;
    while(pInputStr[index] >= '0' && pInputStr[index] <= '9')
    {
        operand2 = operand2 * 10 + (pInputStr[index++] - '0');
        if(index >= lInputLen) return;
    }
    if(pInputStr[index] != 0)
    {
        return;
    }
    // 输入都是合法的
    int result;
    switch(oper)
    {
    case '+':
        result = operand1 + operand2;
        break;
    case '-':
        result = operand1 - operand2;
        break;
    }
    int k = 0;
    if(result < 0)
    {
        result = -result;
        pOutputStr[k++] = '-';
    }
    itoa(result, pOutputStr + k, 10);
}

int main()
{
    // 第一题测试样例
    char output1[100], output2[100], output3[100];
    char *input1 = "deefd";
    stringFilter(input1, strlen(input1) + 1, output1);
    print(output1);
    char *input2 = "afafafaf" ;
    stringFilter(input2, strlen(input2) + 1, output2);
    print(output2);
    char *input3 = "pppppppp" ;
    stringFilter(input3, strlen(input3) + 1, output3);
    print(output3);
    

    // 第二题测试样例
    char output21[100], output22[100], output23[100];
    char *input21 = "aaaaaaaaaaaaaaaaaaaaaaaaabbcd";
    stringZip(input21, strlen(input21) + 1, output21);
    print(output21);
    char *input22 = "cccddecc";
    stringZip(input22, strlen(input22) + 1, output22);
    print(output22);
    char *input23 = "8p";
    stringZip(input23, strlen(input23) + 1, output23);
    print(output23);

    // 第三题测试样例
    char output31[100], output32[100], output33[100];
    char *input31 = "4 + 7";
    arithmetic(input31, strlen(input31) + 1, output31);
    print(output31);
    char *input32 = "4 - 7";
    arithmetic(input32, strlen(input32) + 1, output32);
    print(output32);
    char *input33 = "9 ++ 7";
    arithmetic(input33, strlen(input33) + 1, output33);
    print(output33);
}



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务