//得到年月日 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); }
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; }
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; }
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; }
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; }
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; }
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); }
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; }