您的位置:首页 > 其它

华为机试题 2014

2015-03-18 17:21 155 查看
一、题目描述(60分):

通过键盘输入一串小写字母(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打印输出

当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。

/*
一、题目描述(60分):
通过键盘输入一串小写字母(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<stdio.h>
#include<string.h>
using namespace std;
#define N 1000

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	int h[256]={0};
	int i;
	char *p=pOutputStr;
	for(i=0;i<lInputLen;i++)
	{
		if(h[pInputStr[i]]==0)
		{
			h[pInputStr[i]]=1;
			*p=pInputStr[i];
			p++;
		}
	}
	*p='\0';
} 

int main()
{
    char pInputStr
;  
    char pOutputStr
;
    while(scanf("%s",pInputStr)!=EOF)
    {
    	stringFilter(pInputStr, strlen(pInputStr) , pOutputStr); 
		printf("%s\n",pOutputStr); 
    }
	return 0;
}
/*
deefd
afafafaf
pppppppp
*/


二、题目描述(40分):

通过键盘输入一串小写字母(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”

/*
二、题目描述(40分):
通过键盘输入一串小写字母(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”
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 1000

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	int i,k;
	char *p=pOutputStr;
	for(i=0;i<lInputLen;i++)
	{
		k=1;
		while(pInputStr[i+1]==pInputStr[i])
		{
			k++;
			i++;
		} 
		if(k==1)
		{
			*p=pInputStr[i];
			p++;
		}
		else
		{
			*p=k+'0';p++;
			*p=pInputStr[i];
			p++;
		}
	}
	*p='\0';
} 

int main()
{
    char pInputStr
;  
    char pOutputStr
;
    while(scanf("%s",pInputStr)!=EOF)
    {
    	stringZip(pInputStr, strlen(pInputStr) , pOutputStr); 
		printf("%s\n",pOutputStr); 
    }
	return 0;
}
/*
cccddecc
adef
pppppppp
*/


三、题目描述(50分):

通过键盘输入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” 注:格式错误

/*
三、题目描述(50分): 
通过键盘输入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>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 1000
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	int i,j,num1,num2,oper,result;
	i=0;
	//空格是否合法 
	num1=0; 
	for(i = 0;i<lInputLen;++i)  
    {  
        if(pInputStr[i]==' ')  
            ++num1;  
    }  
    if(2!=num1)
    {  
        pOutputStr[0] = '0';  
        pOutputStr[1] = '\0';  
        return ;  
    } 
	
	num1=num2=0;  
    for(i=0;pInputStr[i]!=' ';++i)  
    { 
        if(pInputStr[i]>='0'&&pInputStr[i]<='9')  
            num1=num1*10+pInputStr[i] - '0';  
        else //操作数非法                  
        {  
            pOutputStr[0] = '0';  
            pOutputStr[1] = '\0';  
            return ;  
        }  
    }   
    
	j=i+1;
	while(pInputStr[j++]==' ') ;
    if(1!=j-1-i) //运算符长度不合法  
    {  
        pOutputStr[0] = '0';  
        pOutputStr[1] = '\0';  
        return ;  
    }  
    else   
    {  
        if('+'!=pInputStr[i+1]&&'-'!=pInputStr[i+1])   //操作符非法  
        {  
            pOutputStr[0] = '0';  
            pOutputStr[1] = '\0';  
            return ;  
        }  
        else  
        {  
            if('+' == pInputStr[i+1])  
                oper=1;  
            if('-'==pInputStr[i+1])  
                oper=0;  
            
            for(i+=3;i<lInputLen;++i)  
            {  
                if(pInputStr[i]>='0'&& pInputStr[i] <= '9')  
                    num2=num2 *10+pInputStr[i]-'0';  
                else          //第二个操作数非法 
                {  
                    pOutputStr[0] = '0';  
                    pOutputStr[1] = '\0';  
                    return ;  
                }  
            } 
            if(oper==1)  
                result=num1+num2;  
            else  
                result=num1-num2;
			//printf("%d\n",result); 
			char p[10];
            sprintf(p,"%d",result);
            //sscanf(str,"%d",&a); 字符串转整数 a 
            strcpy(pOutputStr,p);
            return ;
        } 
    }  	
} 

int main()
{
    char pInputStr
;  
    char pOutputStr
;
    while(gets(pInputStr))
    {
    	arithmetic(pInputStr, strlen(pInputStr),pOutputStr); 
		printf("%s\n",pOutputStr); 
    }
	return 0;
}
/*
4 + 7
4 - 7
9 ++ 7 
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: