2014华为机试(一)

/**************************************************************************************************
//华为2014校招机试题
 通过键盘输入一串小写字母(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打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,
但是不要改变函数原型。一定要保证编译运行不受影响。
/***********************************************************************/
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	char flag[26];
	memset(flag, 0, 26);//全部置为0
	assert(pInputStr != NULL && lInputLen != 0);
	int i = 0;

	const char *p = pInputStr;
	while (*p != '\0')
	{
		if (flag[(*p - 'a')])
		{
			p++;
		}
		else
		{
			pOutputStr[i++] = *p;
			flag[*p - 'a'] = 1;//标识已出现的字符,出现了则置为1,没有出现的则为0
			p++;
		}
	}
	pOutputStr[i] = '\0';//字符串末尾加上结束符
}

void main()//测试用例
{
	char str[1024] = { 0 };
	char buf[1024] = { 0 };
	gets(str);
	int length = strlen(str);
	stringFilter(str,length,buf);
	printf("%s\n", buf);
	system("pause");
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 13:49:51

2014华为机试(一)的相关文章

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

2014华为机试西安地区A组试题

2014华为机试西安地区A组试题 题目一.分苹果 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 题目分析: 这道题类似于整数划分的题目,这是很早的一道ACM的题目,主要思路就是考递归. ①当苹果数目或者篮子数目为1时候,就只有一种可能 ②当苹果数目小于篮子数目的时候,按照苹果数目来分配 ③当苹果数目大于篮子数目的时候,空一个盘子 + 先每个盘子放

2014年6月6日--华为机试

准备了还有一段时间了,结果还是悲剧了,主要准备的是算法,结果华为机试更看重字符串的操作,这一块正好是自己的弱项,哎.不过还有时间,这几个月多刷刷题,多锻炼锻炼,加油吧. 机试一共考了三道题,两道简单点的,一道难题,难题考得是状态机,不知道是什么东西╮(╯▽╰)╭,简单的两题做的也不好,回来在重新做一下.   1.倒置英文句子中单词的字母顺序. hello, I am good.  ->  olleh, I ma doog. 这题其实不难,当时脑子有点纠结符号,所以没做出来,还有一点客观原因,平时

2014深圳华为机试剖析

题一: (1)给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况.最大递减数:所输入整数的所有递减数中值最大的一个. 如: 75345323,递减数有:75,753,53,53,532,32.那么最大的递减数为753. 各位数字之和最大的递减数: 如75345323中的各递减数:75各位数之和=12(7+5=12),753各位数之和=15(7

[华为机试真题][2014]63.等式变换

题目 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入: 正整数,等式右边的数字 输出: 使该等式成立的个数 样例输入:5 样例输出:21 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 *

[华为机试真题][2014]64.实现两个合法时间相加

题目 描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果:注意,相加后的结果也必需是一个合法的时间: 附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间: 运行时间限制: 无限制 内存限制: 无限制 输入: 时分秒格式的时间字符串,如00:00:00 输出: 时分秒格式的时间字符串,如00:00:00 样例输入: 00:00:00 00:00:01 样例输出: 00:00:01 答案提示: 建议将时间转换为秒数

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

华为机试 --- 求最大三位数

题目:输入10位0-9数字,取其中三位不同数字组合,求组合出来的最大三位数. 如输入 1 2 3 4 5 6 7 8 9 0,组合出来987最大. 测试代码如下: #include <stdio.h> #include <stdlib.h> int IsSame(int *a, int num); int main() { int i=0; int j=0; int a[10]={0}; int input =0; int length =0; int temp=0; for (i