Esempio n. 1
0
//得到年月日
bool CDateTime::getYMD(string text, int month, int &p)
{ 
	int year=0,day=0,tmp;

	year=getHeaderDigit(text,p);  //提取text的p位置之前的数字

	int p0= findDigit(text,p);
	if(p0 == -1 && year == -1)return false; //only exist month,not year、day

	int p1= findNonDigit(text,p0);
	if(p0 == -1 && p1 == -1)return false;
	if(p1 != 0 && p0 != -1)
		day=atoi(text.substr(p0,text.length()).c_str());
	else
		day = -1;
	
	if(year==-1 && p1!=-1 && p0 !=-1)
	{
		int p2=findDigit(text,p1);
		if(p2!=-1)
		{ 
			int p3 = findNonDigit(text, p2);
			if(p3==-1 && p3 != ':') //如果是 ':'说明这前面找到的数字为小时值
				year=atoi(text.substr(p2,text.length()).c_str());
		}
	}
	if(day>31 ||(year >=0 && day == -1))//当day>31或day==-1交换year和day的值
	{
		tmp = day;
		day = year;
		year = tmp;
	}
	if(year != -1)// year == -1 时说明在串里没有年份
	{
		sTm->tm_year = year<1900 ? year: year-1900;
		sTm->tm_year = sTm->tm_year > 29? sTm->tm_year:sTm->tm_year+100;
	}
	sTm->tm_mon = month;
	if(day != -1) 
		sTm->tm_mday = day;
	else			//当day == -1时说明在串里没有找到day值
		sTm->tm_mday = 1;
	p=p1;
	return true; //成功
	
}
		TEMP_PAR
		Vector<INT_TYPE> NUM_SYS::chop(const Vector<INT_TYPE>& z) const 
		{
			IVector a_j = findDigit(z);
			FVector f_a_j = I_FConverter::template convertVector<Vector>(a_j);
			FVector f_z = I_FConverter::template convertVector<Vector>(z);

			FVector ret = _baseInverse*(f_z - f_a_j);
      return F_IConverter::template convertVector<Vector>(ret);
		}
Esempio n. 3
0
File: Run.cpp Progetto: CJeffrey/PAT
long long findStartRadix(const char * oriValue,const long long referenceValue){
	long long ret;
	long long num=findDigit(oriValue);
	if (num <= 1){
		ret = -1;
	} else {
		long long firstDig = char2Int(oriValue[0]);
		ret = pow(double(referenceValue)/(firstDig+1),1.0/(num-1));
	}
	return ret;
}
Esempio n. 4
0
File: Run.cpp Progetto: CJeffrey/PAT
long long change(const char * oriValue,const long long myRadix){
	long long num = findDigit(oriValue);
	long long ret=0;
	long long tmpValue;
	int tmpChar;
	for(long long i = 0;i<num;i++){
		tmpChar = oriValue[i];
		tmpValue = char2Int(tmpChar);
		ret+= tmpValue * pow(double(myRadix),int(num-i-1));
	}
	return ret;
}
Esempio n. 5
0
File: Run.cpp Progetto: CJeffrey/PAT
long long findMinRadix(const char * oriValue){
	long long num=findDigit(oriValue);

	long long ret = 2;
	long long tmpValue;
	long long tmpChar;
	for(long long i = 0;i<num;i++){
		tmpChar = oriValue[i];
		tmpValue = char2Int(tmpChar);
		ret = std::max(tmpValue+1,ret);
	}
	return ret;
}
Esempio n. 6
0
File: Run.cpp Progetto: CJeffrey/PAT
long long findEndRadix(const char * oriValue,const long long referenceValue){
	long long ret;
	long long num=findDigit(oriValue);
	
	long long firstDigNum=0;
	long long firstDig;
	for(;firstDigNum<num;firstDigNum++){
		firstDig = char2Int(oriValue[firstDigNum]);
		if (firstDig!=0){
			break;
		}
	}	
	if (num-firstDigNum <= 1){
		ret = -1;
	} else {
		ret = pow(double(referenceValue)/(firstDig),1.0/(num-firstDigNum-1)) + 1;
	}
	
	return ret;
}
Esempio n. 7
0
int main() {
    std::cout << "请输入数据:";
    std::deque<int> Deque;
    int n;
    while (std::cin >> n) {
	if (n > Max) Max = n;
	if (n < Min) Min = n;
	Deque.push_back(n);
    }
    if (Min < 0) {
	unsigned len = Deque.size();
	while (len--) {
	    Deque.push_back(Deque.front() - Min);
	    Deque.pop_front();
	}
    } else {Min = 0;}
    radix_sport(Deque, findDigit(Max - Min));
    for (std::deque<int>::iterator it = Deque.begin(); it != Deque.end(); it++)
  	std::cout << (Min < 0 ? Min : 0) + *it << " ";
    std::cout << std::endl;
    return 0;
}
Esempio n. 8
0
bool CDateTime::parse_chinese(string text)
{
	if(text.length() == 0) return  false;
	//System.out.println("========"+text);
	int start=0;
	int g[12];
	int group;
	while(true)
	{
		group=0;
		for(int i=0;i<6;i++)
		{
			g[i*2] = findDigit(text, start); //第一个数字
			 if(g[i*2]==-1) break;
			 group++;
			 g[i*2+1] = findNonDigit(text, g[i*2]);
			 if(g[i*2+1]==-1) 
			 {	 
				 //没有非数字字符或者上一组的非数字到本组数字距离超过一个字符
				 if(i==0|| textLen(text,g[i*2-1],g[i*2])>1)
				 {
					 group--; 
					 break;
				 }
			 }
			 start=g[2*i+1]; //非数字
			 if(start==-1) break;
			 if(i>0)
			 {
				 if( textLen(text,g[i*2-1],g[i*2])>1)
				 {
					 group--; 
					 break;
				 }
			 }
			 
		 }

       if(group>1) break;
       if(group==0) 
		   return false;
       start=g[1];
       if(start==-1)
		   return false;
     } //while
     string strb;
     string datestr;
     switch(group)
     { 
	 case 6:
		 {
			 if(g[1]-g[0]==2)
				 strb.append("yy");
			 else 
				 strb.append("yyyy");
			 strb.append(text.substr(g[1], g[2]-g[1])).append("MM").
				 append(text.substr(g[3], g[4]-g[3])).append("dd").
				 append(text.substr(g[5], g[6]-g[5])).append("HH").
				 append(text.substr(g[7], g[8]-g[7])).append("mm").
				 append(text.substr(g[9], g[10]-g[9])).append("ss");
			 if (g[11] == -1) 
				 datestr=text.substr(g[0],text.length());
			 else 
				 datestr=text.substr(g[0],g[11]-g[0]);
			 break;
		 }
	 case 4:
         { if(isColon(text,g[5],g[6]) )
		 {
             strb.append("MM").
             append(text.substr(g[1], g[2]-g[1])).append("dd").
             append(text.substr(g[3], g[4]-g[3])).append("HH")
             .append(text.substr(g[5], g[6]-g[5])).append("mm");
           }
           else
           {
               if(g[1]-g[0]==2)strb.append("yy");
               else strb.append("yyyy");
               strb.append(text.substr(g[1], g[2]-g[1])).append("MM").
               append(text.substr(g[3], g[4]-g[3])).append("dd")
               .append(text.substr(g[5], g[6]-g[5])).append("HH");
           }
           if (g[7] == -1) datestr=text.substr(g[0],text.length());
           else datestr=text.substr(g[0],g[7]-g[0]);
           break;
         }
        case 5:
        { if(isColon(text,g[5],g[6]) )
          {
            strb.append("MM").
            append(text.substr(g[1], g[2]-g[1])).append("dd").
            append(text.substr(g[3], g[4]-g[3])).append("HH").
            append(text.substr(g[5], g[6]-g[5])).append("mm")
            .append(text.substr(g[7], g[8]-g[7])).append("ss");
          }
          else
          {
              if(g[1]-g[0]==2)strb.append("yy");
              else strb.append("yyyy");
              strb.append(text.substr(g[1], g[2]-g[1])).append("MM").
              append(text.substr(g[3], g[4]-g[3])).append("dd").
              append(text.substr(g[5], g[6]-g[5])).append("HH")
              .append(text.substr(g[7], g[8]-g[7])).append("mm");
          }
          if (g[9] == -1) datestr=text.substr(g[0],text.length());
          else datestr=text.substr(g[0],g[9]-g[0]);
          break;
        }

        case 3:
          { if(isColon(text,g[3],g[4]) )
            {
              strb.append("MM").
              append(text.substr(g[1], g[2]-g[1])).append("dd")
              .append(text.substr(g[3], g[4]-g[3])).append("HH");
            }
            else
            {
                if(g[1]-g[0]==2)strb.append("yy");
                else strb.append("yyyy");
                strb.append(text.substr(g[1], g[2]-g[1])).append("MM")
                    .append(text.substr(g[3], g[4]-g[3])).append("dd");
            }
            if (g[5] == -1) datestr=text.substr(g[0],text.length());
            else datestr=text.substr(g[0],g[5]-g[0]);
            break;
          }
          case 2:
          { strb.append("MM").append(text.substr(g[1], g[2]-g[1])).append("dd");
            if (g[3] == -1) datestr = text.substr(g[0],text.length());
            else datestr = text.substr(g[0], g[3]-g[0]);
            break;
          }

     }
	 //SpiderDateFormat df(strb);
     return 0;//df.parse(datestr,date);
}
Esempio n. 9
0
bool CDateTime::parseYMD(string text)
{
	int year =0,month = 0, day = 0;
	int date[10] = {0};
	int i = 0;
	int effectivetime = 0; 
	bool istrue = false;
	ReplaceSpace(text," |\\.|-|\\\\|-|年|月|日","/");

	char *str = strdup((char *)text.c_str());
	char *savepos = NULL;
	char *strtmp = mystrtok_r(str,"/", &savepos);
	while(strtmp)
	{
		int p = findDigit(strtmp,0);
		if(p != -1 && i<10 && strchr(strtmp,':') == NULL){
// 			int atlocal = strlen(strtmp)-4;
// 			while(atlocal<0) atlocal++;	
// 			strtmp = strtmp + atlocal;
// 			
// 			while(*strtmp< '0' || *strtmp>'9')
// 			{
// 				if(*strtmp)
// 					strtmp++;
// 				else
// 					break;
// 			}
			date[i] = atoi(strtmp + p);
			if(++effectivetime >= 2)
				istrue= true;
		}			
		strtmp = mystrtok_r(NULL,"/", &savepos);
		i++;
	}
	free(str);
	if(!istrue) return false;
	for(i=0;i<10;i++)
	{
		if(year == 0 && (date[i] > 1900 || (date[i] >0 && date[i] < 99)))	{
			year = date[i] > 1900 ? date[i] -1900 : date[i];
			continue;
		}
		if(month == 0 && date[i]<12 && day ==0){
			month = date[i];
			continue;	
		}
		if(day ==0 && date[i] <31 && (year !=0 || month !=0)){
			day = date[i];
			continue;
		}
		if(year && month && day)break;
	}
	if((year&&month)||(month&&day)){
		sTm->tm_year = year;
		sTm->tm_year = sTm->tm_year > 29? sTm->tm_year:sTm->tm_year+100;
		sTm->tm_mon = month>0?month -1:0;
		sTm->tm_mday = day == 0 ?1:day;
		return true;
	}else if(year&&day){
		sTm->tm_mon = year>0?year -1:0;
		sTm->tm_mday = day == 0 ?1:day;
		return true;
	}
	return false;
}