std::string strGPGGA()const{ // 失敗することが多いので、エラー処理を加えて無視するようにする try{ std::string tmp; tmp = boost::format("$GPGGA,").str(); hmLib::date UTCD; UTCD.from_time(getUTC()); tmp += (boost::format("%02d%02d%02d.%03d,") % UTCD.Hour%UTCD.Min%UTCD.Sec%UTCD.mSec).str(); int d = (int)abs(getPos().y); int m = (int)abs(getPos().y*60.) - d * 60; int n = (int)abs(getPos().y*600000.) - d * 600000 - m * 10000; tmp += (boost::format("%02d%02d.%04d,%c,") % d%m%n % (getPos().y > 0 ? 'N' : 'S')).str(); d = (int)abs(getPos().x); m = (int)abs(getPos().x*60.) - d * 60; n = (int)abs(getPos().x*600000.) - d * 600000 - m * 10000; tmp += (boost::format("%03d%02d.%04d,%c,") % d%m%n % (getPos().x > 0 ? 'E' : 'W')).str(); tmp += (boost::format("%d,%02d,%02d.%d,") % (int)getFail() % 3 % 1 % 0).str(); d = (int)getHeight(); m = (int)(getHeight()*10.) - d * 10; tmp += (boost::format("%05d,%d,M,") % d%m).str(); tmp += (boost::format("%04d.%d,M,%03d.%d,0000*") % 0 % 0 % 0 % 0).str(); char csum = 0; for(int i = 1; i < (int)tmp.size() - 1; i++)csum ^= tmp[i]; tmp.push_back(csum); tmp.push_back(0x0d); tmp.push_back(0x0a); return tmp; } catch(const std::exception& ex){ std::string tmp = ex.what(); return tmp; } }
int main() { while (1 == scanf("%s", s)) { int j = 1; for (int i = 0; s[i]; ++i) str[j++] = s[i]; for (int i = 0; s[i]; ++i) str[j++] = s[i]; str[j] = '\0'; scanf("%s", s + 1); getFail(); bool f = false; int k = 0, len = (int) strlen(s + 1); for (int i = 1; i < j; ++i) { while (k > 0 && s[k + 1] != str[i]) k = p[k]; if (s[k + 1] == str[i]) ++k; if (k == len) { f = true; break; } } if (f) puts("yes"); else puts("no"); } return 0; }
void find(char* T,char *P,int f[]) { int n = strlen(T),m = strlen(P); getFail(P,f); int j = 0; for(int i = 0;i < n;++i) { while(j && P[j] != T[i]) j = f[j]; if(P[j] == T[i]) j++; if(j == m) printf("%d\n",i-m+1); } }
int kmp_find(unsigned char *T,unsigned char *P)//在T中寻找P出现的位置 { int n=strlen_unsigned(T),m=strlen_unsigned(P); getFail(P); int j=0; for(int i=0;i<n;i++) { while(j&&P[j]!=T[i]) j=Fail[j]; if(P[j]==T[i]) j++; if(j==m) return 1;//匹配成功 } return 0;//匹配失败 }
bool judge(int* T,int* P,int* f){ int N = 2 * n - 1,M = n - 1; getFail(P,f); int j = 0; for(int i = 0;i < N;++i){ while(j && P[j] != T[i % n]) j = f[j]; if(P[j] == T[i % n]) j++; if(j == M){ return true; } } return false; }
int main() { scanf("%s", s); n = strlen(s); getFail(); //for(int i = 0; i < n; i++) printf("%3c ", s[i]); puts(""); //for(int i = 1; i <= n; i++) printf("%3d ", fail[i]); puts(""); int cycle = -1; for(int i = 1; i <= n; i++) { int mid = 2 * fail[i] - i, res = i; if((i - mid) % 2) continue; cycle = (i - mid) / 2; if(i % cycle == 0 && mid % cycle == 0) res = cycle; printf("%d%s", res, i == n ? "\n" : " "); } for(int i = 0; i < cycle; i++) putchar(s[i]); puts(""); return 0; }
int normal_draw(dxO& dxo)override{ try{ try{ IsDataModeMUIBut.set(Pint(70, 20), "Data"); dxo.draw(Pint(5, 5), IsDataModeMUIBut); } catch(const hmLib::inquiries::unconnected_exception&){ dxo.draw(Pint(5, 5), dxoStrP(Pint(70, 20), "Data", getClr(error, strobj))); } try{ int gpsCh; dxRGB clr; if(inq_getPic_GPSCh() == inq_getRequest_GPSCh()){ clr = getClr(normal, butobj); } else{ clr = getClr(active, butobj); } if(inq_getRequest_GPSCh()){ gpsCh = 1; } else{ gpsCh = 0; } SetGPSNumBut.set(Pint(70, 20), (boost::format("GPS#:%d") % (int)gpsCh).str(), clr); auto ans = dxo.draw(Pint(80, 5), SetGPSNumBut); if(ans == -1){ signal_changeGPSCh(); } } catch(const hmLib::inquiries::unconnected_exception&){ dxo.draw(Pint(80, 5), dxoStrP(Pint(70, 20), "NoCnct", getClr(error, strobj))); } try{ auto Data = GPSData;//inquiry_getGPSData(); auto Time = Data.getTime(); dxo.draw(Pint(155, 5), dxoStrP(Pint(70, 20), (boost::format("Fail:%d") % static_cast<int>(Data.getFail())).str(), getTimeStrClr(Time))); } catch(const hmLib::inquiries::unconnected_exception&){ dxo.draw(Pint(155, 5), dxoStrP(Pint(70, 20), "NoCnct", getClr(error, strobj))); } } catch(const hmLib::exceptions::exception& Excp){ dxo.draw(Pint(0, 0), dxoButIO(getSize(), std::string("=ERR=") + Excp.what(), getClr(error, butobj), true, CLR::White, ALI::left)); } return 0; }