某企业HW一面和二面笔试题,给我一到难的题目,2019年8月26,

某企业HW一面和二面笔试题,选中比较难得题目,2019年8月26,
“one two three four five three one four four for fiv fiv”
“one two three four five for fiv”
现场没做出来,现场写代码还是压力挺大,第二天,回来,自己完成了,本人是个小菜鸡,有更好的方法希望大家分享!
题目背景可以想象为,一篇文章的所有单词,单词通过空格隔开,空格个数未知,将已经出现过了的单词清空即可。
某企业HW一面和二面笔试题,给我一到难的题目,2019年8月26,_第1张图片
编程平台,VS2013


int strxiangdeng(char *a, char *b)//这里可以简化,
{
	char *temp = b;
	while (*temp!= '\0')temp++;
	if (*(temp - 1) == ' ')
	{
		while ((*a == *b))
		{
			if (*a == ' ')return 1;
			a++;
			b++;
		}
		return 0;
	}
	else
	{
		while ((*a == *b))
		{
			if (*a == ' ')return 1;
			a++;
			b++;
		}
		if (*b == '\0'&&*a == ' ')return 1;
		return 0;
	}
}
int   clearstr(char *a)
{
	int len = 0;
	while (*a!=' '&&*a!='\0')
	{
		*a = ' ';
		a++;
		len++;
	}
	return len;
}
char * nextstr(char *a)
{
	while (!(*a == ' '&&*(a + 1) >= 'A'&&*(a + 1) <= 'z'))
	{
		if (*a == '\0')return a;
		a++;
	}
	return a + 1;
}
char * function(char *a)
{
	char *p = a;
	char *find=a;
	int len;
	p = nextstr(p);
	while (*p != '\0')
	{
		find = a;
		if ((*p) == ' '){ p++; continue; }
		while (find < p)
		{
			if ((*find) == ' '){ find++; continue; }
			if (strxiangdeng(find, p) == 1)
			{
				len=clearstr(p);
				p = nextstr(p);
				break;
			}
			else{
				find = nextstr(find);
			}
		}
		if (find == p)p = nextstr(p);
	}
	return a;
}
int main(int argc, char *argv[])
{
	char a[] = "one two three four  five  three one four four  for fiv fiv";
	printf("**********************************************\n");
	printf("%s\n", a);
	printf("%s\n", function(a));
	while (getchar() != 'e');
	return 0;
}

你可能感兴趣的:(C)