zoukankan      html  css  js  c++  java
  • 华为机试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();
    }



     

  • 相关阅读:
    使用 kubeadm 部署 v1.18.5 版本 Kubernetes 集群
    MHA高可用主从复制实现
    基于Keepalived高可用集群的MariaDB读写分离机制实现
    MariaDB主从半同步复制详解
    postman学习网址
    程序员的脑子是更新换代最快的
    带组装3ROS_1节点_192通道
    带组装4ROS_1节点_256通道
    带组装5ROS_1node_320Chan
    带组装7ROS_1节点_448通道
  • 原文地址:https://www.cnblogs.com/byfei/p/3112381.html
Copyright © 2011-2022 走看看