• 小谈汉字转换成拼音辅助函数和辅助类


    void StringManipulation::TrimString(string &str,const string val)
    {
    	str.erase(0,str.find_first_not_of(val));//去掉字符串前面的空白符
    	int pos=str.find_last_not_of(val)+val.size();
    	if (pos<str.size())
    	{
    		str.erase(pos);
    	}
    	//去掉字符串后面的空白符
    }
    #pragma once
    #include "common.h"
    class GraphRepresentation
    {
    public:
    	GraphRepresentation(void);
    	~GraphRepresentation(void);
    	map<int,string>Vertex;
    	map<pair<int,int>,string>GraphR;
    	void GetPaths(vector<vector<int>>&paths,int beginindex,int endindex);
    };
    #include "StdAfx.h"
    #include "GraphRepresentation.h"
    
    GraphRepresentation::GraphRepresentation(void)
    {
    }
    
    GraphRepresentation::~GraphRepresentation(void)
    {
    }
    void GraphRepresentation:: GetPaths(vector<vector<int>>&paths,int beginindex,int endindex)
    {
    	stack<int>mystack;
    	vector<int> singlepath;
    	int *vertexsStatus=new int[Vertex.size()];//0,未在栈内,1已经在栈内。
    	map<pair<int,int>,int>arcstatus;
    	for (int i=0;i<Vertex.size();i++)
    	{
    		vertexsStatus[i]=0;
    	}		
    	for (map<pair<int,int>,string>::iterator it=GraphR.begin();it!=GraphR.end();it++)
    	{
    		arcstatus[it->first]=0;
    	}
    
    
    	mystack.push(beginindex);
    	vertexsStatus[beginindex]=1;
    	int justpopup=-1;//保存刚刚出栈的元素
    	while(!mystack.empty())
    	{
    		int elem=mystack.top();
    		if (elem==endindex)//出栈的第一个条件找到了目的节点
    		{  //以下代码完成栈的遍历
    			while(!mystack.empty())
    			{
    				int tmp=mystack.top();
    				mystack.pop();
    				singlepath.push_back(tmp);
    			}
    			for (vector<int>::reverse_iterator rit=singlepath.rbegin();rit!=singlepath.rend();rit++)
    			{
    				mystack.push(*rit);
    
    			}
    			paths.push_back(singlepath);
    			singlepath.clear();
    
    			vertexsStatus[elem]=0;
    			for (int k=0;k<Vertex.size();k++)
    			{
    				if (vertexsStatus[k]==0)
    				{
    					if (arcstatus.count(make_pair(elem,k)))
    					{
    						arcstatus[make_pair(elem,k)]=0;
    					}
    
    				}
    			}
    
    
    			mystack.pop();
    
    		}
    		else
    		{   int i=0;
    		for (;i<Vertex.size();i++)
    		{
    			if (GraphR.count(make_pair(elem,i))&&vertexsStatus[i]==0&&arcstatus[make_pair(elem,i)]==0)
    			{
    				mystack.push(i);
    				vertexsStatus[i]=1;
    				arcstatus[make_pair(elem,i)]=1;
    
    
    				//graphR.erase(make_pair(elem,i));
    
    				break;
    			}
    		}
    		if (i==Vertex.size())//出栈的第二个条件,没有可以往栈内添加的后续节点了。
    		{
    			int elemtmp=mystack.top();
    			vertexsStatus[elemtmp]=0;
    			for (int k=0;k<Vertex.size();k++)
    			{
    				if (vertexsStatus[k]==0)
    				{
    					if (arcstatus.count(make_pair(elemtmp,k)))
    					{
    						arcstatus[make_pair(elemtmp,k)]=0;
    					}
    				}
    			}
    
    
    			mystack.pop();
    
    
    		}
    
    		}
    
    
    
    
    	}
    
    
    	delete vertexsStatus;
    
    }
  • 相关阅读:
    Custom.pll : ZOOM小测试
    在编写PL/SQL代码中使用SELECT语句时如何避免例外发生
    使用Custom.pll修改标准Form的LOV(转)
    WINCE 定时器0控制LED驱动源码
    WinCE文件目录定制
    printf输出格式
    WINCE 微秒、毫秒级延时函数
    WINCE远程注册表的使用
    CE开发中可能遇到的问题
    S3C2440 进行微秒级、毫秒级延时函数
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/2048138.html
Copyright © 2020-2023  润新知