SMMMMM696 SMMMMM696
关注数: 6 粉丝数: 58 发帖数: 1,290 关注贴吧数: 7
新人求助 问个问题,请问为啥gsencode编码后用gsdecode解码,为啥前4个是????,测试过了,编码没有问题,解码有问题,里面的st变量前4个字符也是????,请问究竟哪里出了问题,请大佬指点迷津,谢谢! function cutoutstring(s:PAnsichar;l,r:longint):PAnsiChar; begin cutoutstring:=PAnsichar(copy(s,l,r-l+1)); end; function search(s:PAnsiChar;l,r,a:longint):longint; var mid:longint; begin if(l>=r) then begin if(StrComp(cutoutstring(alphabet1,l*2-1,l*2),s)=0) and (a=1) then search:=l-1 else if(StrComp(cutoutstring(alphabet2,l*2-1,l*2),s)=0) and (a=2) then search:=l-1 else if(StrComp(cutoutstring(alphabet3,l*2-1,l*2),s)=0) and (a=3) then search:=l-1 else search:=0; end else begin mid:=(l+r) div 2; search:=search(s,l,mid,a)+search(s,mid+1,r,a); end; end; function cansearch(s:PAnsiChar;l,r,a:longint):boolean; var mid:longint; begin if(l>=r) then begin if(StrComp(cutoutstring(alphabet1,l*2-1,l*2),s)=0) and (a=1) then cansearch:=true else if(StrComp(cutoutstring(alphabet2,l*2-1,l*2),s)=0) and (a=2) then cansearch:=true else if(StrComp(cutoutstring(alphabet3,l*2-1,l*2),s)=0) and (a=3) then cansearch:=true else cansearch:=false; end else begin mid:=(l+r) div 2; cansearch:=cansearch(s,l,mid,a) or cansearch(s,mid+1,r,a); end; end; function findpos(str1,str2:PAnsiChar;a:longint):longint; var len1,len2,i:longint; s1,s2:ansistring; bool:boolean; begin len1:=length(str1); len2:=length(str2); for i:=a to len1-len2+1 do begin if(StrComp(cutoutstring(str1,i,i+length(str2)-1),str2)=0) then begin findpos:=i; break; end end; if(i>len1-len2+1) then findpos:=0; end; function gsencode(s:PAnsichar;a:longint):PAnsichar; var i,d,len:longint; st:ansistring; begin len:=length(s); st:=''; for i := 1 to len do begin d:=ord(s[i])-ord(' ')+1; if(a=1) then st:=st+cutoutstring(alphabet1,d*2-1,d*2) else if(a=2) then st:=st+cutoutstring(alphabet2,d*2-1,d*2) else if(a=3) then st:=st+cutoutstring(alphabet3,d*2-1,d*2); end; gsencode:=PAnsiChar(st); end; function gsdecode(s:PAnsichar;a:longint):PAnsichar; var i,d,len:longint; st:ansistring; begin len:=length(s) div 2; st:=''; for i:=1 to len do begin if(cansearch(cutoutstring(s,i*2-1,i*2),1,95,a)=true) then d:=search(cutoutstring(s,i*2-1,i*2),1,95,a)+32 else begin randomize; d:=random(95)+32; end; st:=st+chr(d); end; gsdecode:=PAnsiChar(st); end; procedure TForm1.Button1Click(Sender: TObject); var s:PAnsiChar; s2:Ansistring; begin s:=gsdecode(gsencode('ASSDWEERE23232',2),2); ShowMessage(s); end; end.
新人C++问题求助 所有程序代码如下:(VS2022,Debug模式,*64) #include <iostream> #include <string> #include <fstream> #include <sstream> #include <algorithm> using namespace std; class gsdata { public: string gstype; double gsvalue; string gsstring; }; class strpart { public: string strpartstring; }; string gsencode(string s) { long i, gslength, result; result = 0; gslength = s.size(); for (i = 0 ; i < gslength; i++) { result = result * 93 + (s[i-1] - 33); } return to_string(result); } string gsdecode(string s) { long number,stri; string str; str = ""; number = stol(s); while (number > 0) { stri = number % 93; number = number / 93; str = str+char(33+stri); } reverse(str.begin(), str.end()); return str; } string gscutoutstring(string s,long a,long b) { long gslength; string result; gslength = b - a + 1; result = string(s, a, gslength); return result; } int main() { fstream f; gsdata gsfile[500]; long i, gsdatalength; cin >> gsdatalength; for (i = 0; i < gsdatalength; i++) { cin >> gsfile[i].gstype; if (gsfile[i].gstype == "Val") { cin >> gsfile[i].gsvalue; gsfile[i].gsstring = ""; } else if(gsfile[i].gstype == "Str") { cin >> gsfile[i].gsstring; gsfile[i].gsvalue = 0; } } f.open("GSG.gsd", ios::out); for (i = 0; i < gsdatalength; i++) { if (gsfile[i].gstype == "Val") { f << "VE-" << gsencode(to_string(gsfile[i].gsvalue)); cout << "VE-" <<gsencode(to_string(gsfile[i].gsvalue)); } else if (gsfile[i].gstype == "Str") { f << "ST-" << gsencode(gsfile[i].gsstring); cout << "ST-" << gsencode(gsfile[i].gsstring); } f << ","; cout << ","; } f.close(); cout << endl; f.open("GSG.gsd", ios::in); long readlength,readpos,readi,readilength,readstrlength,d; string datastring,datastr1,datastr2; strpart onedata[500]; f >> datastring; cout << datastring; readpos = 0; readi = 0; readlength = datastring.size(); while(readpos<readlength) { onedata[readi].strpartstring = gscutoutstring(datastring,readpos,datastring.find(",",readpos)-1); readi += 1; readpos = datastring.find(",",readpos)+1; cout << onedata[readi].strpartstring << endl; } readilength = readi+1; for (readi = 0; readi < readilength; readi++) { readstrlength = onedata[readi].strpartstring.size(); d = onedata[readi].strpartstring.find("-",0); datastr1 = gscutoutstring(onedata[readi].strpartstring, 0, d - 1); datastr2 = gscutoutstring(onedata[readi].strpartstring, d+1, readstrlength-1); if (datastr1 == "VE") cout << "Val "; else if (datastr1 == "ST") cout << "Str "; cout << gsdecode(datastr2) << endl; } f.close(); cout << endl; return 0; } 输入数据为:问题如图所示,请问如何解决(输入完之后跑不起来)
1 下一页