华为机试4

一:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔,请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’,并将子串存储。
如果输入”abc def ghi d”,结果将是abc,def,gh,i,d,
要求实现函数
Void DivideString(const char *pInputStr,long IinputLen,char *pOutputStr);
输入:pInputStr:输入字符串
IinputLen:输入字符串的长度
输出:pOutputStr:输出字符串,字符串已开辟好,与输入字符串等长
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出

 

#include <iostream>
using namespace std;

void DivideString(const char *pInputStr,long IinputLen, char *OutputStr)
{
	bool flag = false;
	int j=0;
	int i=0;
	while(pInputStr[i] == ' ')
		i++;
	for (i;i<IinputLen;i++)
	{
		if(pInputStr[i]==' ')
		{
			flag = true;
		}
		else
		{
			if(flag)
			{
				OutputStr[j] = ',';
				j++;
			}
			OutputStr[j] = pInputStr[i];
			j++;
			flag = false;
		}
	}
	OutputStr[j] = ',';
	OutputStr[++j] = '\0';
}

int main()
{    
	char Indata[] = "  45456 fadf fdsafdsa";
	char OutData [100] = {'0'};
	DivideString(Indata,strlen(Indata),OutData);
	cout<<OutData<<endl;
	getchar();
	return 0;
}

 

三:将一个字符串中出现次数最少的字符删掉,并保证删除后的字符顺序不变,如果出现次数最少的字符有多种,则这几种字符都要删除,该字符串长度不会超过20个字符。 例如:源字符串为“abcdd”,删除后为“dd”

#include <iostream>
#include <map>
#include <string>
using namespace std;

char *deleteMin(char *InputSrc,int ILen)
{
	int sz[26]={0};
	int min=20;
	int i;			//最小出现次数
	for(i=0;i<ILen;i++)
		++sz[InputSrc[i]-'a'];
	for(i=0;i<26;i++)
	{
		if(sz[i]<min&&sz[i]!=0)
			min=sz[i];
	}
	for(int t=0;*(InputSrc+t);++t)
	{
		if(sz[InputSrc[t]-'a']==min)
		{
			memcpy(InputSrc+t,InputSrc+t+1,ILen-t);
			--t;	//因为跳过了一位
		}
	}
		return InputSrc;
}

char *DeleteMin(char *InputSrc,int ILen)
{
	map <char,int> MapChar;
	char OutPutSrc [100] = {0};
	int nMin = 20;
	for(int i = 0;i<ILen;i++)
	{
		if(MapChar.find(InputSrc[i])==MapChar.end())
		{
			MapChar[InputSrc[i]] = 1;
			continue;
		}
		MapChar[InputSrc[i]]++;
	}
	map <char,int>::iterator itr = MapChar.begin();
	for(itr;itr!=MapChar.end();itr++)
	{
	   int nCount = itr->second;
       if( nCount < nMin)
		   nMin = nCount;
	}
	int j = 0;
	for(int i = 0;i<ILen;i++)
	{
		char data = InputSrc[i];
		if(MapChar[data] == nMin)
			continue;
		OutPutSrc[j] = InputSrc[i];
		j++;
	}
	strcpy(InputSrc,OutPutSrc);
	return InputSrc;
}

int main()
{
	char data [] ="11,,5489aabbccddd";
	DeleteMin(data,strlen(data));
	cout<<data<<endl;
	getchar();
}



 

posted @ 2012-11-06 10:46  byfei  阅读(219)  评论(0编辑  收藏  举报