OJ 系列之字符串过滤与压缩

<pre name="code" class="cpp">#include "stdafx.h"
#include <stdio.h>
#include <string.h>
/*

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,
若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

/*
* Function:stringFilter
* Usage:stringFilter(pInputStr,lInputlen,pOutputStr)
* -----------------------------------------------------
*/

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	if (lInputLen<=0)
	{
		return ;
	}

	int i,a[26];

	for (i=0;i<26;i++)
	{
		a[i] = 0; //没有出现,赋值为0
	}

	int temp = 0;
	long lOutputLen = 0;

	for (i=0;i<lInputLen;i++)
	{
		temp = pInputStr[i] - 'a';
		a[temp] = a[temp] + 1; //比2大就是有重复了

		if (a[temp]==1)
		{
			pOutputStr[lOutputLen] = pInputStr[i];
			lOutputLen ++;
		}
	}

	pOutputStr[lOutputLen] = '\0';

	for (i=0;i<lOutputLen;i++)
	{
		printf("%c",pOutputStr[i]);
	}	
	
}

int _tmain(int argc, _TCHAR* argv[])
{
	char pInputStr[1024];
	char pOutputStr[1024];
	long pInputLen;
	gets(pInputStr);
	pInputLen = strlen(pInputStr);
	stringFilter(pInputStr,pInputLen,pOutputStr);
	getchar();
	return 0;
}
 
 
 
 
 
 
/*

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
*/
/*
* Function: stringZip
* Usage: stringZip(pInputStr, long lInputLen, pOutputStr)
* -----------------------------------------------------
*/
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	if (lInputLen<=0)
	{
		return;
	}

	int i,j,num;
	long lOutputLen = 0;
	char temp;
	i = 0;
	while(i<lInputLen)
	{
		temp = pInputStr[i];
		num = 1;
		for (j=i+1;j<lInputLen;j++)
		{
			if (pInputStr[j] == temp)
			{
				num ++;
			}
			else
			{
				break;
			}
		}

		i = i + num; //下一次开始从不重复的数开始算起
	
		if (num !=1)
		{
			pOutputStr[lOutputLen] = '0'+ num;
			lOutputLen ++;
		}
		
		pOutputStr[lOutputLen] = temp ;
		lOutputLen ++;
		
	}

	pOutputStr[lOutputLen] = '\0';

	for (i=0;i<lOutputLen;i++)
	{
		printf("%c",pOutputStr[i]);
	}	
}


你可能感兴趣的:(C++,华为机试)