串操作,C++实现
对串的基本操作都全已经实现
对kmp,kf字符串替换等功能全都已经实现
由于时间原因。没来得及注释,希望大家参考见谅。
串操作hstring.h头文件实现
//kallen
1 #ifndef _HSTRING_H_
#define _HSTRING_H_
#include <iostream>
class mString
{
public:
mString();
void newString(const char *ms);
~mString();
bool isEmpty()const;
int lengthString()const;
void copyString(const mString &src);
friend int compareString(const mString &lhs,const mString &rhs);
void clearStirng();
void concatString(const mString &lhs_src,const mString &rhs_src);
void subString(const mString &src,int pos,int len);
void insertString(int pos,const mString &ms);
void deleteString(int pos,int len);
int indexkfString(const mString &mt,int pos);
int indexkmpString(const mString &mt,int pos,int *next);
void replaceString(int repos,const mString& mt,const mString &mv,int *next); void insaftposString(int pps,const mString& mt,const mString& mv);
void printString()const;
private:
char *base;
int length;
void nextSt(const mString& mt,int *next);
}; #endif //_HSTRING_H_
hstring.cpp的实现代码
#include "hstring.h" mString::mString()
{
base = NULL;
length = ;
} mString::~mString()
{
if (base!=NULL)
{
delete base;
}
base = NULL;
} void mString::newString(const char *ms)
{
int i = ;
while(ms[i]!='\0')
{
++i;
}
length = i;
base = new char[length + ];
for (int j = ;j<length;++j)
{
base[j] = ms[j];
}
base[length] = '\0';
} bool mString::isEmpty()const
{
if ( == length)
{
return true;
}
else
{
return false;
}
} int mString::lengthString()const
{
return length;
} void mString::copyString(const mString &src)
{
int i = ;
for (; i<this->length;++i)
{
base[i] = src.base[i];
}
} int compareString(const mString &lhs,const mString &rhs)
{
int i = ;
while (lhs.base[i]!='\0'&&lhs.base[i]!='\0')
{
if (lhs.base[i] > rhs.base[i])
{
return ;
}
else if (lhs.base[i] < rhs.base[i])
{
return -;
}
else
{
++i;
}
}
if (lhs.base[i] =='\0'&&rhs.base[i]!='\0')
{
return -;
}
else if (lhs.base[i] !='\0'&&rhs.base[i]=='\0')
{
return ;
}
else
{
return ;
}
} void mString::clearStirng()
{
length = ;
} void mString::concatString(const mString &lhs_src,const mString &rhs_src)
{ length = lhs_src.length + rhs_src.length;
this->base = new char[length+]; for (int i = ; i<lhs_src.length; ++i )
{
this->base[i] = lhs_src.base[i];
}
for (int i = lhs_src.length,j = ; j < rhs_src.length; ++j,++i )
{
this->base[i] = rhs_src.base[j];
}
this->base[length] = '\0'; } void mString::printString()const
{
int i = ;
for (;i<length;++i)
{
std::cout<<base[i];
}
std::cout<<std::endl;
} void mString::subString(const mString &src,int pos,int len)
{
if (src.length != )
{
if (pos>src.length)
{
std::cout<<"The location of pos is illegal!"<<std::endl;
}
else
{
if (pos+len- <=src.length)
{
length = len;
this->base = new char[length+]; for(int i = ; i < length; ++i,++pos)
{
this->base[i] = src.base[pos-];
}
}
else
{
length = src.length-pos+;
this->base = new char[length+];
int j = ;
for (;j<length;++j,++pos)
{
this->base[j] = src.base[pos-];
}
this->base[j] = '\0';
}
} }
else
{
std::cout<<"The string is empty!"<<std::endl;
}
} void mString::deleteString(int pos,int len)
{
if ( == length)
{
std::cout<<"The string is empty!"<<std::endl;
}
else
{
if (pos>length)
{
std::cout<<"The location of pos is illegal!"<<std::endl;
}
else
{
if (pos+len->=length) //delete all char after pos,
//but it don't move any char
{
int i = pos - ;
for (;i<length;++i)
{
base[i] = '\0';
}
}
else //pos+len-1<length,we have to move the char that
//from pos+len to length
{
int i = pos-,j=pos+len-,k=length-(pos+len)+;
for (;k>;--k,++i,++j)
{
base[i] = base[j];
}
for (int m = len,n = length;m>;--n,--m)
{
base[n-] = '\0';
}
}
} }
} void mString::insertString(int pos,const mString &ms)//insert ms before pos
{
if (!=length&&!=ms.length)
{
if (pos>length)
{
std::cout<<"The location of pos is illegal!"<<std::endl;
}
else
{
int len = ms.length,i = length-,j=length+len-,k = length-pos+;
int m = pos,n=;
base = (char *)realloc(base,(length+len)*sizeof(char));
length = length+len;
if (base==NULL)
{
std::cout<<"Create memory is failed!"<<std::endl;
}
for (;k>;--k,--i,--j)
{
base[j] = base[i];
}
base[length]='\0';
for (;n<len;++m,++n)
{
base[m-] = ms.base[n];
}
}
}
else
{
std::cout<<"The string is empty!"<<std::endl;
}
} int mString::indexkfString(const mString &mt,int pos)
{
if (length != &&mt.length!=)
{
if (pos>length-mt.length+)
{
std::cout<<"The location of pos is illegal!"<<std::endl;
return ;
}
else
{
int i = ,j = pos;
while(i<=mt.length&&j<=length)
{
if (mt.base[i-]==base[j-])
{
++i;
++j;
}
else
{
j = j-i+;
i = ; //it's wrong if example : i = 1; j =j-i+2;
if (j>length-mt.length +)
{
break;
}
}
}
if (i > mt.length)
{
return (j-i+);
}
else
{
return ;
}
}
}
else
{
std::cout<<"The string is empty!"<<std::endl;
return ;
}
} int mString::indexkmpString(const mString &mt,int pos,int *next)
{
int i = pos,j = ;
nextSt(mt,next);
while(j<mt.length&&i<=length)
{
if (j == -||mt.base[j]==base[i-])
{
++i;
++j;
}
else
{
j = next[j];
}
}
if (j==mt.length)
{
std::cout<<i-j<<std::endl;
return (i - j);
}
else
{
std::cout<<"nothing"<<std::endl;
return ;
}
} void mString::nextSt(const mString& mt,int *next)
{
int i = ,j = -;
next[] = -;
while (i<mt.length)
{
if (j==-||mt.base[i]==mt.base[j])
{
++i;
++j;
next[i] = j;
}
else
{
j = next[j];
}
}
//for (int i = 0;i<mt.length;++i)
//{
//std::cout<<next[i];
//}
} void mString::replaceString(int repos,const mString& mt,const mString &mv,int *next)
{
if (length!=)
{
int pos = repos;
if (mt.length!=&&mv.length!=)
{
int pps = pos;
while(pos!=)
{
pos = indexkmpString(mt,pps,next);
if (pos!=) //when pos == 0,maybe execute copy in the head
{ //example;a = "abcaabcacbc";mt = "bc";mv = "ff";
insaftposString(pos,mt,mv); //but the result is; "fffaaffacff".
}
pps = pos+mv.length; //from pos+mv.length
}
}
else
{
std::cout<<"The string of mt or mv is empty!"<<std::endl;
} }
else
{
std::cout<<"The main string is empty!"<<std::endl;
} } void mString::insaftposString(int pps,const mString& mt,const mString& mv)
{
if (mt.length<mv.length)
{
int n = length - (pps+mt.length-); //the sum of movement
int dis = mv.length - mt.length;
int k = length+dis-;
int j = length-;
base = (char *)realloc(base,(length+dis)*sizeof(char));
length = length+dis;
if (base==NULL)
{
std::cout<<"Create memory is failed!"<<std::endl;
}
for (int i = ;i<=n;++i,--k,--j)
{
base[k] = base[j];
}
base[length] = '\0';
for (int i = ,j=pps-;i<mv.length;++i,++j)
{
base[j] = mv.base[i];
}
}
else if (mt.length>mv.length)
{
int n = length - (pps+mt.length-);
int dis = mt.length-mv.length;
int i = pps+mv.length-;
int j = pps+mt.length-;
for (int k = pps-,l = ;l<mv.length;++l,++k)
{
base[k] = mv.base[l];
}
for (int k=;k<=n;++k,++i,++j)
{
base[i]=base[j];
}
for (int k=,l = length-;k<=dis;++k)
{
base[l] = '\0';
}
length = length-dis;
}
else
{
for (int i = ;i<mv.length;++i,++pps)
{
base[pps-] = mv.base[i];
}
printString();//inserts without thinks
} }
以上代码都经过正确测试
这里仅仅列出对kmp算法应用的测试。
#include "hstring.h" int main(void)
{
char d[];
char e[];
char f[];
std::cout<<"Please Enter a string!"<<std::endl;
std::cin>>d;
std::cout<<"Please Enter a string mt"<<std::endl;
std::cin>>e;
std::cout<<"Please Enter a string mt"<<std::endl;
std::cin>>f;
char *p1 = d; //= "abcaabcacbcabc";
char *p2 = e;//"abc";
char *p3 = f;//"ffff";
int p[];
mString a,b,c;
a.newString(p1);
b.newString(p2);
c.newString(p3);
a.replaceString(,b,c,p);
//int p[88];
//a.indexkmpString(b,1,p);
//std::cout<<a.indexkfString(b,2);
//a.insertString(4,b);
//a.deleteString(1,4);
//c.subString(a,2,3);
a.printString();
//c.concatString(a,b);
//b.printString();
//a.clearStirng();
//std::cout<<a.isEmpty();
//std::cout<<a.lengthString();
//std::cout<<compareString(a,b);
system("pause");
return ;
}
测试结果:
kmp字符串替换操作测试
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAATMAAADmCAIAAAA2vvUhAAAgAElEQVR4nOy897vbRpYtWv/Zu/O6224HyZH33Xn39nTP3AnddrsdJdmSFSxZsoJFB1nBtiQrUVlH4RyexHOYMwmCAAiSYAAJEgBzzqn2+wHkCZKs0O1p+84761sfP4RdVRuovWoXAoFgA393YIAhQB+gA9AAqAGUAQoAWQBpBEIf4h2INICtAlMCMgceGZxpcKTAngKbALYkticHjmTPley4kk1PsuJN5omE5EsIRFIihKw3VfSkqq5U257qW1JgFEAfh8UozIVGWnYwFxouhEdLEbwcBUMMTDxYBXCkwJHsO/i6I1ayRyVbMGahaaPPaXAbllz6BceS1rYwbV2ccVm0XkJLhWYDgo7LG+JNSwo7ZXDnwVcGfxWYJlB1IKtAVMBbAmcGrGkw8rAc6S+Hu8vB9nKgsczUDMGWkeuZYyMrD7YE2AWwp8CRBkcKO5I9B9+0x6pmrmJgK0t0ed5X1rqrd+21W+bGdUPrhrl9y9657erc9XS1/v4cM9CFR/ooXuaGS6G+ju0sMq1FprnINBbpuo6q6ZjGEtNcCrSXg53lUG853NdHBvroSB/DhhgYeDDwMB8b3eN6N4KNS0zlLCOdpGNfUvRhv+sI4zwatKs565cx64mY93SMvRDjr8bkG9HCba56L9zUBnvaUF8bHmjDIy2Hbwf616jmeW/le1f+W7twysKdNFLHDc4zBtslo+mGWT9t0c06zDq32+BjLHTUwopWrmSLdWwC2ASwp8CeBrsIThnQzx2l/3/EijJbAA2ACkARIAcgDyE1gGQH4i2I1CFYhUAJ/DkgZHCL4EqDM6Vw5EwNXELPLbS9QoMQyj4hSybT/mTSn0r7Uxm/WCClCiE23emuMz2ypcCcBH1sqOP6C8GuLtxf5ob66NAUx5YEOFLgEsErg1ccetMdb6rmTRZd0ZQ9yFko0kQ4lz32RZdlzmnWOsyzbvccGVhgYrqgaIiWLYm2UwRPFsgS0FVgmxBuQ7AFgQbQNfBXgMiBSwJ7cmCJNi2RmjlUMbNFc6BgDVZskZYj1nMmsFMAVwo8ig/SyJvuEqkGIVTcsYqTK1vZspkq6YmKzlWbszVmzK0ZW0vrbGndbS3RWfD3dOxAHx6aoiNjZGAIdfRsa5mpL9O1ZaqyTFaWyfKyv7JM1/SBhp5tGYJtQ7hrjPSN0aExNjLxYEqAKQmLscF0pHUzVNGw2TOB+HGaVlOOz6ilgwHd4eDi55F5dWzueNx8Ou69yAev88JUTL4XLWoj9YVwZ4HrzXP9eW44HxndYzs3qPolonTGmfnenvjOEjplIk/onWcMdo3RctNknjYb5+xOnYs0EkGrn7exGTtXccQ7455Ng1MEpwTuzIYyfw5ggBFAD6C5NmGOQBqA0IVkG+JNiNYhXAW2BEweyAwQEnhF8KTBnQZ3auRODTyprjfV8aWapFAmhZxfEGlBoFMSLWZpuUDLFVJqeqWOWxw60tiaGJriPT3XWQq39FzXGO2Z40NbYuQUwCMBkQF/Hvw5oDJDWu5QUt2XzLujKXswYqEZI0kt+8hFDzHvJhbIgI6OLQXThkjeEq87Uj2PDGQe6DKwdQi3INqFcAtCTQjUgK4AmQevPHIJTXu86IjkHeGsIyg7AqIzlHdHqu5425MYeIWRTwRSBjIL/syIkruU1KTTFTJZ8cUqnnDZHSjb/RWzt2ZwNpZszSVHU+du6TwtHdleprvGYM/MDazxoSXSM4fbpkDDRFdMVNlIFo1k3kjkjWTRSFVMTNXENkzhlonrmqN9S3xo4UeWBLYmwSLAEt/TRhtT4eIVVvqBCZ9kvGrK+Jl/5iAzfTh49wh3+2js9vH44um4XcP7byZid+KpmXhuPlpZirSXIt2lSG8p0l+KDGeC7SmqeoXIn3NKZ+38aUv4e5P/W737nMF1xeicMjlnTI4Fm2/ZxZq9Mbs/7QjkXVzNHe+6U+BOg0cEjwxeGXzZDWX+HFCUqeTMOkAFoACQG4E8gHQXkm1INCFeh0gNQmUIFIDKAimDTwJCBK8IXhET4tCX7vvSHV+6Raaq/lSBEjK0INLpDC0WaKlCZ+qk1CLEtlvsO1MDW6JnibWNXFMfrhu5liXWtfEDpzDyiODLAF0AtgRsEdgCBAujYK5PS3VfsuCJSY5QwsrGTUxUT3FLfk7P8MagaI4ULPGaI9n2iCNfFugCBCoQqgPXglgHuCYE68BUgCqCLwNeseNOlh0xycmlXSHBzSbcAd4TEr2RAhGv+5I9MjWgJExngM4Dk8OBbJ/NtFm5HkjVab5GRatkqOplak6ybvM0LI6myd0yeltGX8vgb5sCHUuoZ4v0HfGBI9Kxhxq2QNVKFS1kweLLWYiM2Zsx+3IWqmgJVCzBuoVrWaNdW7xvT4zsyZEjiZVrBEOiNx+r3+UK11nxfCD0Le3+ilo+RN49TN/5nL19NDz1ReTWyej8D3HL5bhviufuxZOz8YwuVjFE24ZoWx/t6qN9fWwwH2rfpavXffmLLvGCPXHOwp010af1xEWD77rRd8fomzOSS1bW6IhaPYKTzLgDZQ/X9MT7RAoIEXwi+GTwZcC/ocyfBYoyBwCd9WlzRZxCG/gmxOrAVSBYBCYHVAb8MpAykBKQEialISkN/GLXL3aodINKV+h0kU7naLFISxVartNyi5RbXrHtSXcdQtfOt62xpilSN4VrlmjDzndcyYE3jUkZ6BywRQhXIFwGrgyRMkSKwOZ6tNTwCWV3LOeMZuxhyRJMm9i0JZy1RUt2vu4S2t70gJSBykGgCGwFwjXg6hBtQbgOrCLLHHilgVuou/isI5JwhXlXKOZhI16WI8ICGc2R8SqV7NDpPi2PAjlgC8DmIZgbhnLdUKYVFFus0GT4Bh2pk8GGl266fE27p2UnWlayZaVaFqZlDXbsXNcV67n5vivadoXqTqbkIHN2Mmv3yTavbPWKNjJro4t2tmIPNxzRljPedSUGLgG7UtiVBlcaXCKYhZ4uXp/hCrfYtCYQPkt7j5NGtU/7BTXzFXPv6+Dd4+G7pyO6i1H79Th1j4/O8qlFPqePV8zxlineMcW7pnjPFB/owi1toHqbLFzzyFecgsYWu2QJXTDSV03MlImdMQV1ppDeGrM4BbtH9pBFb6Dm5do+fkCmgVQmDjL4s0Dn1iiTogNGk+VJ6KeY0Wj0M0b2fwFggAFAD6AN0JxkzhJAHkN2AGIPhDbwDYhVgStDsABMFugs0BmgMkDJmJIxJQ9peUDLPVrq0FKTkeqMWKGlOi016UybznT8UpsQ255U2ym0HXzTHqtbIlULV7HH6q5E25vq+yRMZ4HNQ6gEkQpEKxCtQKwCsQqE85jN9qh0kxBqHr7iipcdsZKdKzpjVVei6RE6hDggZUxlgc4DW4RgCUIVCFchXAO2DHQefFnwiOAS2k6+5IiJdi7mDEVcIc7Dhgg2RIZ5f1Sm+DIttJl0LyAP2SyweQjmIZgfhXKDULYXlDpsqh3g20ys5Q+3fGzLQzVdvqbT33TQLXugZQ+2nOG2O9rxxHsE3yOiTW+o6mEKHn/GTcoun+QkJAchOv1ZZ6DkDFVd0aY73vYket7UkBCBEIGQgJDAK4Fd6Bv4xnykdC8o3wjELtHUGb/9BLF0yr/0La37jl08HVq8yFmuRb13Yuwszy/yop7Pm/iqlW/b+I6N79r4no0fGCLtxWBthipNEdlb7vQNZ/KaLXbVHJ4yc9Pm6Lw5pjfzJnvK5pScnjxBlolAg+Q6fn5ApYGSgJKBzgCdBWatMm/dnvb6Wa8/8ABZgmIJir23YL43b7o3b7p8fapYLD4++H4JkLUqhJCaJNXoPqjJB61JNUIqrfx38GuE8QDjPsZdjNsYNzCuY1zFuIRxboTlPk53cKKBYzXMlXGogANZzGQxncV0RpElpjMjOjNkMkNG7jNyl5HbjNSipRYtdyi565d7PrHrTbVdQtOZaDjidXu0aotUbFzZGa95Ei0i3ffLIzqL2TwOlXCkgiMVHFVYxqE8DmSGlNj1pVqE0PQkGq543RWvuxMtb6rrEwd+GfszmM5iJo8DBRwo4EARsyUcKGEqh30ydqexIzmwxRu2aN7KCZYQZwuFnMGQm2W9AdYXivujEhUv0ckmk+4GpEEgiwN5HMjhQHbEZodsph8Qe0yqSyc6VKxNci0i2PIwTRfVdNJNR6DlCLYcoZaLa3uiHSLe9fFdX7RBhCpeOu/1yR6f5PZJLoV0zsWWXFzNHWt5+a5X6PvSI5+EfRL2yWM6Un0T39JFKrPB3O1A8hoVuujznfHazvps5yjrecZykbVcC3mmOHomGl2IpZbiGUO8aInX7PGWne/Y+a490XMk+uZoaylUm6dL077cXa98x5W67UjcssbuWuOzloTOkjRYUhabZHdmXZ6C11fxMQ0f1/HHB1QaUyKmZUxnMJ3FdBavKlNvsnZ7vU73Mez2ejq9SZKkB5SYmVU9OvRJ9Y/r4VF6eSLIWtU6USmSXBEaqV5X9erqg5J9EPeJ9b4iTy/lEcYjjIcY99eIszkRZxHj7IDcvVL/fjJUxGwOB3Kr4mSyYwayOJAdBTJDJtNXSGf6VGZAyQNS7BKptifZdCXqLr7qjFWdsbIzWvbwdUJok2KfymAmh9k8DhcxV8aR0phcEQfzmMkMKalPprq+VIcQ2p5k25NsE6mub5wtMZ3FTA4brqz0uupEYCLLhZVT9PIRW9YcTppDnDUYnjn1W4TQe1NBIsyTMZniS4zg2LpypHtJJouZzIiRxRObJhtfuKuLd4hI2xNuu1nnOwihZ6e0oZYz3HZG2u5Y+8qOieV2Oxmu+Jg8QS69t7aDnr06H656og2v9vBKmF2XsV/GS5r1IYsQ+tCkZeXbNH+dDGkI/xWSvEqR1xnyBkveDrEzd7YjhP6vM5QhVjDHKza+4eDbzkTXmey6kj1Xsm+Luf6MEHr2+hWqMEdmNV9vQr+6cMGRnHOkFu0pvS1tOr97XXPP3NJxHT/ff4gyRwAKzRZbOJI+eEZ/6Iflw+eXjlzSHb2yGAzy5VIxJQgpQSiVit/d9Xx316PTm0RJWimoEENGq0Kq2QwGGGE8wuRRhJBKK00CcYSxpFUhNTlas2Uka1UIqbTyeJVU32/w5CTV9zU3wvK0SjUt4yHGPjU6SuIhHnN1lVQjlVbEq7seIHkUjSsZk1QjpPZNVkWtCqF1ld/P9fYr7E/Yw7iDcQvjBsY1jEuY3IvQpruy0MR8HU/vV33LYjaPb+2dxO5Ek2xuzMCEzCS1UpkRKfWJdNcrtDyJuidR8/A1d9zyLkLvzdXJdJuS+kwGB3KYzeFQAYeKOFSYMI/ZLGbkoV/sk+muL9UlUl1C6BJC15cekNJIkTSTw4xejfaRgTxmcvjGXoQ2aXUy9hLaXyH0trZviXVun34Zob1nuZTZfOYfEEK/fe5XCL17hyMiAhnPUonwiRdfPUF0GanP+GeeQWjLMqak4Y096IPFPpnq+5Ke9xD69ZmEJ9rWfIQQQr/67avot7dnubYr2nbFOp6Zw7/+IUkmupTn7m8Q+uBujWRLJK1/H6H3bhaIQIFgi0S4QkTrBO9674W7utSAFKXjmxD6hKQymMqO6RVHzqTnLfTqZ9baYrAwy0j3qMQUGblNRe7Q3N0AN81ysyHtHxFCCP2306w5XrHF645E05XoupJdd7LnEfqXdyGE0D889wr67Y0bgdISXdCR+j+iTfvmRZ1b0rsko1O2XNyD0N4LnoLLV/L4KwunXkEIfTDbp0VMS2NlMllMZzDqASg0mq1cVP6j+t6fvr7751NTfzlz890L1ykqWi7m1yrzzJxLpzclJWmlYH/MzD0Ven0201+NOfJzhF7XyqtbZO3rSHVPXjGQ76nWG9xP+Z5qrf2jd5GfI/Q5OV71rk1sKu29B1Lj2JJUI5U29SOZU/HNq0ZITa42RKoRUnvXOJPSqu7bso7r7Xvr2cW4M8mZDWVCK2s3I9WFJBaamK/hSBmHi5jN46m9CO0lA+M8OZFlfg1z61IrJQ9JsedLdQihSSQbRLJBJG3vIfTBQosSe7Q8XKkkmMOhPA7mcFCpM4uZzIgeK7NHpvu+dN+X7pPiwC8NKRkz2dWxYDwi5DC1rEZIfU3CV3YjtMtn5/vWWMcas72F0Fv3ZEtEsEWSjsjcOwi9dy/hi0kkX6CEGpPuMGKPkQa0LJ3YhJ65JPmlISkOyHTfl+oTyd6VnQh97PbEOq5oxxVpa79/FT13ZzbW8fBdT6JHJHtkskcJfTqVOv48euZMjApX/UHTBwh9cKdCclUyUiNjTZLvkMkemR74xSElY71GhTZrDdnVgcwn4fnzr6MX7t6JtYxcbSlUWmCzs4w4FxDnWXEhJC6Gxe8+Qv/te/3h59E/nOFsfN2RaLmSHY/Q8wh9b6pPpPpEqu9OdmfOvIqeu3k7VDGyJSNT+H4LQh8sG3xZE5E1e7PWy3sR2neBLLqosoepEqGm7sxrCH1+Q8S0jBl51SXUAFC4uGTgovLOCwtvnLr5u2Pn/vH4t//47TcUFS0XC4IgCEKyVCpeMFuuePQ6vSkuSS2AFkB7lZnbKvTabKaNscIOxm41QiptApOHETpM4g6W76jQa1q5g3EH446sfQ2p7sh4vPoQyndUP2bwkF0uNUJqcsWBtqx9FSGE1K6VLQ+SVCOVlse4jTFPkvzKRrSmKlK9rpL7VicNHSJxG2NeuzJBUjvXrSKkJlsYt1ZHAdVtGbfWZMsqxhWMC5j8BCF0mEw0cLyGo2UcLsqnNq9Ws3UZGy+r0Gb1ts0IIbTNSG5DaJsRBws4mMemKyq0WWvMYTqDKf/0byalfrP70G9W6/j8VlY6uRk9u1f9LEIIqW8b1Aipbymyz0gnNqFnLop+aXBtN0K7P/8AIYRe/4YcUjKmFVnm15HJYb1GhTZpdbL89Yvo1+dFV3LgSPTsPH/0efR/n2Ht8awjnnHFl95F6L0ZmUwU/EKVTrcCUo+RBow8pGVyC0JblrBfGpHikEwPfOkBIaS/fgH9+gfBk+h5+J4n3p078xp6/u5CokcIA19qQKYH/vSQTg8ZYvoZ9NoJd4eON+mofcvqkR6+IXSpVJ8Sh9Q4KcknNqNnL8trRxa/TL6P0LvzA2eiZ4u3LdGGKVLVh0uGcMkYKZkiJfP0p+j56/fikaPPo1/9wLuSbY/Q9ab6vvTAlx6S6SEpDklxSAi9+R9eQ89PTUdqNq5qDZWttz9F6NNzTNFGF2100XH9U4T2XwpUPGzVG6z7Ii3SdfcZhLYsYVrGzPKaDFEEUKgo87UjZ547eGzTF1++fPzz1747qORMQUgqOfMWM3c3dE+nN4UkqQJQnbAGUIPMTRV6ZTZTw7g+YVSrQiptFJOfIfQZiesY10k1UmmjeLKM1PY19g9QvqlS3ZSfeJesfWVNhVGt+hWV6jO16hW1+pUHE6Lixhp/7Or1u9a1NfH/4W6PD7Ama19RkzWMa1i+qUJIWSbVCKltGNcwrmHyM5U2gnENY5saIZWWmwiyjHEJ4wLG2QGWktoXEEJIdYYb58xgHt/eh9BeUokk0xUVQmibAQcLOFggtyG0zYSDRRwsYLOizPy4m7csDympT0l9SupRkmcLQluXB0xmGMgqaldPKXlSP1FmBjMZ+cQm9MwlkZKG1/cghF4/7h9R8ur1bSC/LlcH8jjAaMdz0Yx8bBP69QXZkx66hYFbSH75AvrVuahbKHuEslcwv4fQB/Nlf7pOiS1G6gUyw0BmxGTwzU8Q2qRdzmBKXhHncPHC6wh9fiU1IIQxF869jl6YXkwPyfTQL40oCd/YMx72bopDJj1ghB6T6DDJLiP0mFTqxIsIvThtkEbMmrjfqr9/ZKGX1WiTdlHE3tTQLfRdia6Db9tjTXu8aeebDt7xDnr1C3fLnUx89QL69TmBSPd96QEpDf0S9kuYUihjUhwsnH8NvXBnjm+54w1nrO6MRNXPoXfuVJ2hqjNYdd0+gNBnl8N1L9cgIk0f3/EnvVsQ2rqsuKe+qWTyZTUSR6BQUeYLR77e/JX6lZNHXj/92f+4sFfJmSuzWTbDshlWpzdRopQbQW4E+RHkR1AYQQFnrqrQS9pMcYQVlkbYdBSho2RphNeQ/BShT0lcGuESqUZIdU3CpREu4fV8cHqp0gZ/fBc7blS+qkIvzcjFES6OyE9V6k9VqqsS+SlSmxQDSfvSyrJCUo1Uqpce1O0En5K4OMLsjGq1FVKN1ldSkLQvIdUVCRdGuDAi960UPkoWRrhAqhFSG0e4MML5Ec6P5DU3TbSBEc6PcG6IswOcHeBMD6c7WGhhvo4dN1QIIfSS1lzAwTye2ofQPlIRg5IYzQUcLOJgcY0yi9h8RYVe0pry+Na+NfdUMiMmM2Qyvq0IbV0eBbKYzcmnNqNnr8jsemUy2YkyNTKVwTf2IPQJSWcwsyLLHA7kMVtYK05yK0LPXJaZLKaz8vFN6DeXZFLChIQJUfz6RfTrCwlCbBFiixSdHyC0ZbFJSR1G7jGZoTIzN2pUSlDSGUwpN58l7NepEVIdI0ekqHBIpoe6C6+jTTNLEqZkTGWw4lgggwOU9lmE0B4yIA0D6UFAHAakUUDCAb/2WaQ6SY1vbgdyOJCTT25GCKlvrSpTPrF5fLykhH3iiEgPvamBR+grvLIL/fpCikgPiHT62IvoNxdEUhqtODA+ORnMZDAl46ULr6MX7y0IXW+y40m0PXxr7syr6Pmp+VjDE2t4pg8idPBKrEXwbYLvkMmen5h+BqlOUPjmJ+sjL94GhYoyX/rm6GvfHvrvZ/f/48VPfnf1Y4qKltZcZ/a6nV63o9ObPLyU7kK6C2IXpC5IXZC7mUuvoU13M5kuznRxtouzXXIvQns9ONtbx+UjCB0hsz2c7ZF7Edp8V77PYJV9WfO6SpPC2f569nC2J2teU2kEnOnhTBdnemNSd1XoNS3Vw/Rd1V7Pig1531EjhDbdlcf2R8iV4pmerHkNfeLGmS6Wk9pNSL3UxfJ4WXUpieUult1qtLK9i+Uu9t9Vode0/i5eOozQxGzpMEKHSamLJbcaIbWui6UuJu+qEEJ73JPl17RkF4tdnO7gdAen2lho4fEktoojZcyVyI8Q+u0VeZwzJ8o0P0KZV1WKmKfW5NjJ1Sm5FaGty5jN4WBePrUZ/faKPFaXMpvNKRE8jlQ6i2+sue20MollFWUqZLXPIrTVMH7mMb4VtJekMtifwX6Z/AChD5aGpDzwywO/7N2C0JalPp0ZMtlRIIsDOXxrL1Km36s3n7NYr1EhpL4xfnK7yuVLKrRJq1ce2KzencaBHDZqVGiz1pjBARkHMpPttPZZpDrJrJ+BB7TPItWpwGRkCWifRepbuXHTVAb7ZeyXMSlhUsJ+UvubB4IH7SWVW9P3X29nsf6SCm2a1qUHZLrvE3qE0PV67vwavfaVu+NNdLzawwgdvpLoEsmeT+iRqcHShdfRJu2yvDoIKkTBKihUlPn695/9P+f3/U/N7t9f3/4vU1spKlosTJRZLDabjWqlotOb7BEp3gC+AXwDEg1INkFoZs69il6cyqSaONXE6bj2RYTQIVJsYbFF7kZotxOLLSy2sMhrX0TqxRYWW9h3W4UQevG2PN7lVE+KYLGFxbZ84VXVBR5LnTHFNhbbyl75wquqC3GcauJUAyuNppo41SR3IdX5OF44pF5ojYunW2OmeO2LSL3QwqkJFw6hF2/La4rL519FuxzjhRenVnctHEQvTslCEwsONULquQZONnCygecOIoRU52I42ZDPvYJeuCUnGzjZIHcihA6SyQZO2lft5w4idJBMNHCiIf/wCkKvaN0NnGhgvo75Oo7XcKyGo2Htcy9rLSUcLuJQgfwQoW1GzD6YM1/SmsbykE+9hNA+cmVmq+RM1qBGCG3TYzaHWUa77bLM5shtK1vyk5ypzEgZ7bMIbdVP7rgqOTCHbyrKXAm+lTy5RpaKe+OnkePiqhPMRGCbtcvZ8VMWejI0rFQ4tUaWirCZHDZcVq3O6yZaVWhQbt5MLG/tVZ1klPtY5DaE0F5Syf/PXlbmAvKpzQht1ppymDWoVw52ah9CSD01OQrlxK60zqx5dLy2aWZlzLosB3Lrh6cJAzls0KgUpfnFISkOfak+kepf2YV+fU7wJnveuSMIHbmS7BFCn0j1r+5CCL1+zDciJUzq1AihD5awX8Z+vxbRRaAKQBVgcdlIB+KHb18/cvfq0WnNF9qLX82dd7vpFWUWC4V6rVoqlXR6kykohcvAVYCrQKQC0SrEqpkzL68bVnZacaKmkNyJ0E7byqp87hW004aTNZys4WREuaZCCCH0itZTx0IdJ+tYqGOhIZ97RXU+hlMNnG7idBOnGlhQWJfPvaL6IYITNcxXJ6xhvoZnP0Mv3JSVhn6Y2CjkI9rnkVpbG1vyEe3zSHWWW1tcPvsK+tg2MahhvobjCm1q9IrWWcNx6/rp9Mta+8ozesvqperzLyO0n4xWcbRKble2HSCjYe1zE4vnXlahl7W2Co5UcKSMuTLmSjhcwqESDplWm3h2XVpDCKFthvuUiVnjarvb9k12rSkyDkRFCeNV+eRm9OwVmcmPI/Lm3ontZvXWzfcrk8nff20WyCvTwrVQ31yV1rotDKN9Zr3pVj0OGO6/MHnmsvygpeLAqntjJ7WGPA7kydXHofvIyeiwxrHNWuPE4VurlxnqW4XJCxKs9lmkOhlYzfnMWomu36LU/OwVWTntwSIOlVZ559P1Hm7S6sQhkR54hb5n/nP0wr35ZM8zd2SdzQv3FoSBNzUk0kMiPVy48Ppkx1Hky4LCeZ1hMOjXa+V6tVyvlhv1eqNebdQqnXar22k3m41arVaplCuVsk5vMjASW4RgEUJFCJUgXIJwCbgSRMoQHRPHHmC8jOMVHK9g53UVelnrrIxXx6zieHVVZokaTtYnnAgy2cDJOk7UMexbYqwAACAASURBVF/DfBXHKw9pJWZWI6SeKeNYWT7zsupMCM/sRw+DavunqueuylHlCXtwRTOq0yEcLePI/SS3I7TdhCMlHC7hcHGVoTUMFsePB8P3sTTmWkvlns3KNdv4Pmd+fUA8RBJ/K5kV5jCTW5cZ1mWJNT4wD5S6r+x9Pv+d+XRH/Wiu6DC7TpxrZ/KKJsPl+xksju9UK5eshDjypgbuZN+V9LyD0DuzXRe/homuK9FzJXquZP9BIq8MXhm8Gbh8c1qnNz3IZaPFYLYtG8wrWzTXby8zGToPTB4CBeUPChAsQqgAoSKEi8AVIVyEcBFzKyyNqbxlEi2R25HqdBBHSxOWJ6zg2ESoiRpO1HFivTITdZxQklgFRyvjd1bWU/7+JfSRafJGy1oWcbiAwwUcyuNQHodyOJQbjZfzOJTH4TwOF8b1hNcoUHkQb76iQvvI4BoVBX4ksu+/KluZ+ayPkskF1brx4ph/fJ3jz2C/UuGKDNbHEJ1f3fVQYayLSKWGNd4qD9n9k8uqdcyszD8xrZTKkVvuG9k+IR8s5Z88vl9fFtP5p+DfJNG1F35Ppcnx2XtgIrBZa5xcygZWZBnU/na91XM3ZK6KQ2UcKGA6h/0Z7JOwNzVyJQeOeM8R706feQ3tcNui7Qk7tmjHFvtRIq8ECm3x9oI/M09KK5wjpTlSmvdJc5MtC35pwS/pqIwr2aayQOeAzgGjSHQNJ68mr2OoMBYtV1plZC2VZDt5r5qvAV+HRAOSDRCaIDRBaIHQBKEBiTrwdYhVIVYBrqSMAhAqQKgAoUlD4UlDSj4fG+QhmMNsdsRmBgG5H5B6jNQNSD1W7rOZAZsdBrM4lBtXspbBArD5MQN5oHNAZ4HKgj8L/sz4L1pr6c+APwPKKWJy4/PD5IFWmBuXJTPgk4GQx+9Ve0Rwp8GTBo8IXhEICXzyuB4qNz7bKzUoDqyQXuHEjFnDcZHcqs9+GUgJfBIQEhAiEOk1FMEnAakcxUoTK8XXHK9S0Dsppbwj7pOAlMdlleKrbj/I3AP8McvHkckBk4PAA1x3Eh5XnMkCk4VAFgIZCMgQyEyYBeWde7YAwRKEyhCuAFeDaH0dw5XxX2r9WSAk8KSwkx/YYl1rtGOJtC1c28y1npDIm4YxxQkl8EjgkcEjg1sCjzT+9SgaloGQwScDqZz63OovtZ7+LFBKgE5enw/kgM1PEuw4r66hItcycIo4axCvA1+HZBOSLRDaILRAaEGyBYnGWJnRCoRLECyM/0DEKk3kxhIKFlY53iuPGLlPp7v+VIsUGr5EjeArvkSNTNb9QpNKtel0l5EHARmv6908MLk1kZ0BUgZCXtXS+GsDwoQpcKXBKwKh/G9r5UTlgMwBmQFfBrwyeKTxlwocKbALYBPAmgALD9YEWJNgF8AugCsNbhG8MvgyQK5QBp8MPkXPSkPiWE6+B1octzsZBXwyeCXwpsGdApcAriQ4E+Dgwc6DnQeHwgS4BHCnwJsGQpp0twxkBgh5/AdulwAu4YGyCXAmxrs8SlBJ41Ahs0BmgcytOQ/ZsVf3M7tqTObWHcVDSeXWjE0ZoDNAy5OFNaMVNeG6gmuZVf7HA7QMtAS0iOn0kE6PaHE0eXUOmCwElP/WKMqsQ7QxYROizfGf3ek8kDJ40uBIjqyxnincNoRb+lBTzzaW2foTEnlTsI5p8IrgEcdSdEvgFsEtgkscLyi7FH0SmTF9K5yErFca69wjgkeJG3lVpYHJNHgtVxQbKgNXgUgVYnWIN4BfUWYbkm1ItiDRgngDolXgKhAqAluAQH5Nx2TGnaGMBUwOAllgMkBLQyrd9SUbBF/1xEouLucIyXZWdAQz7nDWwxW80ZKPr5PJtj/dp6XR2t6lsmNFERnwyOCRwCWCIw12AaxJsCTAzIM5DuY4GONgioM1CY4kuJTsp5wuRZCZ8XjnFMGRBqsA5iQYedDHYTkGuggscrDEwXIEDFEwxsGSAIcAzkl3jCmCOw3O5MiRGDj4voPvOxIDR3LoTI7cKay06FvfNd7MuKArDY4k2HiwxLCJGxm5kTE8MoSGhuDQEBoawyNjeGTiRpYotsXBkQRXCtzp1X5Xitt5sMbBEsUmpXhwaAgNDaGhMTQ0hodKcWsc7Ik1JyGzGi0KlbFJ8WodpfHl1brQyj6Mk73KaOWXwS8BJU4oASWPc4Oi+XVlc+DLjcVPTkau8d9fRfCnR35hQCX7/mTfLygcUCKmZaCz4z+aByvA1SHShEgToq0xQzUIlMGfB68MzhRY40Mj111im7pAY4Gpz9O1ear6hETe5MibGHmT2CtgrwDeFHhS4wnVOAhEWPmD6ao+J6fPmwFvdrKQAY8ELglcaXCmwZkChwD2JNiT4BTAnQKPOB59/dn7p1urU+ICsCUIl4GrQrQO8SbwTUi2QeiC0IVkBxJtSLQg3oRIDcIVYIvA5IHOjVPZCsczsZVBVBqRQpeI1z2Roisk25mUxR83EZzBEzL5OAsZt1EJB5N2hXKeaIVItEhhQKZH5CRX+DJAKJMIGVwSOEWwp8EmgCUJJh4McViOwnIEliKwxMESN/7ylU0ARwqcIrglcK8p7pDALoJJAGMSluKwGIN5DrQhmGZhmhnNBEZzwdF8aKQLj5ajeFxPGhwpcCinNDGyxvvmaMcYbupDNUOoYQw3TeGmiWtbYj0bP1SSrWvSrlsGlzjOzFYeTFHQh0c6ZjBPdef93TmyO0t2Z33dObI77+/OU71Fpr/EDg1hbIrByhe0HAI4UmBLgDkORg4vh0ZLgeEi05+nenPkaiWzZHfev1LDyBQFKw8OAdzShDK4lbFpMlkYMwn2JLYrZ2y988r0zZNZDTPl5ggxuRDwieBLA5kCMjUihZFfGJLCiExjUgRSGk8xiEm4ElkgskDkgMhN9JkHX3ZyWSECkQKfMPQlemS841PId3x8lxSGpAh+Gag8MMqfxevAtSCisA3RNoTqwJSBzINbBrsApthwKdydZ5pzVF3rr82QlWnfkxJ54n1PrO+N9738wMMPPYmRR8Ar4hxP1dLgTIFr8hEhlwguZYorgyc7YQY8WXBJ4BDBkQZbEqxJMMfBFANTFCxxsCXAmQRnCjwiENL6ectkGuNXrmcmY1KkBtEGxFrAtyGpKLMLfBviLYg1gatBsAKBIlA5ILPgk1ev01Yu0kgJSBGT6SGZ6nljNXc472BSFl/U6GaX7P4Fs2fO6Fw0e3RW0mBnTO6QlUzaAxknV3HHW55E35saKV+OUhKdSwKnBI402FNgTYFZABMP+hgsRWCRg4UwzIdgjsVzwdFiGJajYIqDJQm2FDgmX15ySmATwSqCOQX6JCzGYS4K0yG4w8IUjW+Sgxu+7hTZvePvTtNdbaC7EBosR0cmHiyCkpaH5ujAGO0uBRsLdHmWzM14ZS2R1ZK5OTI/5y/pArXlcMsU7StfuLEpYk6DTQAzD6YY6DlYCAy1ZPeOq3XTWr9prd+w1m9Yajcs9Vu2xpSzecfVuufpaMneAjPUBbEhAsYomONg5sGSAGMUlsN4MTCc9fe1vu49T/u2szVlb96yNW5Y6tfNtWvm6i1b/bazdc/b1pK9xcBQz4E5DvbUmI40ONJgS4ElCWYem2JDY3RojA4M0b4h2jdGh+b4yJwAxXl7ChyT8+aUwCWDSx7H3jiNp8CTAm9y5E0MCX5AxHu+eJeMdXx8z5ccEgImUuBVIlkClwzuDLgz4J4ErTcHRA6IPBDZcV5xp8EtgJsfemJdT6TlXmG05eF73hQmRCCzQBWAqYw/fcQpbEOkDWwdqDIQWXCKYEmAPjJcYDsz/vo0WbtLVG57K1Pu0hMSubiOi2u7Ih0313FHuu5Y1x0feJIj5ZjdE0EqA/bk223gksAlgycDHiVnZsGbA28OXBlwiWBPgzUJZh6MUdBzsBwCpYMtMbDx4znSeJo3mZu506uTZL/yaZkyhKrANSDWhFgb+C4kusB3Id6BWBuiTQjXIFAGugBkdvx1OWcKnML4W2zjOVgKE8LQl+z7+JY7XHDQKasnbLT7dSbX3LJ1el5/d1Y3M2/QLlkW9E6diTA4gkYiYWGy9nDVEW05+L5TGE8WFGnZRbCJYE2PlWkcK3O0GB7OhwZzbF8b6GuZ/hw70HEjfQyMPJgTYBXAnga7BDYJLCKYRTCmQZeA2RjcC8OtANyg4Zqvf8XTvuyqX/PUbxK122TtHlWfDbQXw319dGSMgyE6WOZ6ulBrganNEPnbLvGGJXbVEL5mjNwwxW5Y4rdsyXtuWesvLQQaeq5niA2McWxOgCUJxjjoI6AL4TlmeNfbuWGrX9KXz83lz83nz8/nzy8Uzi8WLi2XLxuq18y1G/bmbVdn2tefZYaLQawLw3IEDDEwxEAXhjlmNEP273q6U872DVvjmrl22VC5uFQ6v1D4YTZ3Rps9v1C4tFy+aqresDfuertzzHA5AqYEmBNgTo5pjIM+OtSF+wvBzjzbng+05pjmLNOYZ9uLod4S19fHRoY4mBJgEcCWBlsa7CI4RHCIkzwhgCsJLn7kivXd0a6ba7m5pifc8ITr3nDdE2l5Yj03P3QnwSWAKw1OERwSOGVwKvLOgCsL7hx48uAtgCc7mQ2lwZkEZ3zkiPYd4bYj3LKHmvZQwx5qOKJdFz9ypcEjgy8PVBkCNQi1INSCcBvCbQh3gKkBWQJ3FuwiGHnQcQMt07lD1Ka81Vvuyg1X6bqz+IREDrbpYBsOtuEINhyhpjPcdEa7rvjAnRzdJ8sVKmlzPMHIAVEAsgj+EviLQOTBmxnPVaw8mCOgD8IyO9IHh8bQ0BQeWiJDW2xkS2CHoEx3sT05siWGtsTQLoycqXHNvhzQRWCV7z41INKGeAf4DsQ7EOtAtAXhBgRrwJTAnx9fvDnTYBPAlhjZktgujEcQd3LoSfS8fNsbqboCss0bNdv8BoN9QWeamdXdmZ65dWf6zvTcPa1uZt44u2RbMPuXHGGDL20KFCyhuiXatSWwPQW2NNhEsCtMgz0NthTYhJElMTDFe/pIZyncWQy259nWLNPS0q15trMQ6i1Fhsq01pIEaxpsElglsEhglsAowmICZqJwOwjXGbhKDi57WpeclYv2/BVn/ro7P+XN3yOLWqY6H2wtcT19dKgLdefZppaq3vPmb9pTlw3c+Tn/6XvuszPec1rf+Tn/xQXmqjEyZU9Ne3NzdHWBberCXX10aIjDEofn2ZGWGdzz9a7bGheWSt9Ny9/cTB2/lT4xlT51R/z2nnRGmzm3ULi4XL5irt2wtW67O9PkYJbBcywshEDHwVIE5liYoYZ3vL2bjvY1a+OyqXpxuXRuIX96JnPqrnT8Vurra8kTU+nvp+Uf5vIXl8vXbc17RG+eBUN8Qh4McdBxw/lgd4Zp3iOrd32VO0T5trd021O866tMUw0t055jewvh4VIUDDyYBDALYEmBNaWcdrAnwMFjZ2zgjHSdoZaLrbmY0ioDJVew7uQ6zljfkQBHElZ60CaBXQaHDI4MOHPgzoOnAN4iuPPgyoBDBrsItiTY4mCNDC2hrjnYMbNtE9sysU1LuGuLj+wCOGXw5oAsAV0DtglsC9gWsG0ItoGuAVEEZwasKdDHYD44mKY6tzy1G+7qdWf5qqN42VZ4QiILXTVTFTNVsdAVK122Bir2UNMR6TjjA2di5Exih3KNscIUONLgksCdAW8OfAWgSsBUIFAdf7mYygOZBa8IrgTYODAFBga6a2A6RqZjZDvGUNfM9azRgS0+siVG1vjAHO0ZI11jpGuO9iz80J4cOdOgfCuRKQNbhVAdwk2ItiHWgWgbIi3gmhCqQ6ACVAl8efDI4BLBLoAlgZVPFdoSYFfuwfADd6zjiTY8obKTFGyuoNnkWdaZFuaWpqfnpu7cuzF15+bdmanphTtzy/d0lhmjd9YWXPAkdP6sPlAxcC1zfGgVxjFhT0+GbXHoEnuudMchNO2JmjVeNkdKhnBpKVhcZIrzdGkhUNUFG0tcRx8ZjMf+FFhFsIjrlRmBWwG45h9e9bYuu8qX7JmL1tQVR+qGK33bk572SbNUYZ6t6sLtJa43zzZn/JU7nsJNp6QxRM5qyZM3bV9f1X9zzXDihunkTfN3U7ZzWq9mib1hid9xS9NEYZaqLgTbuvBgju3PUL27vu5Nd/uSofy9NnPseuLzi9xRTeSLy5GvrkaPXY+dvC2cnpHPLeQv6ctXLfUbrvYdoj9NjbQTcS6EQcvgu77BLXf3mr2pyPKHhdz3M9LJKeHra3H1Je7wueAXlyPHridO3RHPzOY0xspNd1tLj5aisEJdBM+xvXtUY8pbvu7MX3Nkr9kzV63SFYt0zZ674S7d8lbvkM1pujsbHC5EYCkOeh6MCTAlwJIEKw+26MjO9RyhliNQdfiLDiLj8KQdHsnhle1Exu7L2emyjW3YuJ4tjq08KJ+utKTBKoJNApsM9gw4cuDKg7sAnhK4CuDMgT0DNhEsAph4MEZAHxots/2lQFfHtHV0Sx/sGaPYkgC7CO4seItAVoBprDLQBLICngLYZTAJsBSFWXZwh2xfd1evuSpXHeXL9uIla+EJifRkWU8UGL4eEuphoRZONTipFZW7sdwgnh/FCjhWxLESKIwrLANfhWQNhDqkmyC1Qe5Ctge5HmTbIDdBqkO6AkIBEplRTOxGUu1Iqs2l25zY5sQOJ3Ujcj+SHUSyQy47CMm9oNQNSt2Q3OOyg0huFCtgvgxCDdINkFogtUHuQKYL2R5kuiB3Qe6A1AaxBakGCDVIVCBehlgRIgXM5UaRPI4WcLQAsQLw+RGf7SWynaTU4IVCLC5Fwnw4wAWYIE0HfBTt9VMEHSCYoC/IkaEYGRGouEQnCkyqykrNoNwN50ZcASLFyRkoY748TJT7yXJHKLeSpUaiWE0UynyuFMuWInIpLJVCYikk1UJyKyh3QtnBuIYSRJUv05UhUgauDIE8UDJ4xZFb6LkSTWe84ogWHJGsO5Yl+Kw/kaNT+YBYZqVGUO4EMz1GbPuFBsFX3ZGiPSCZyMSSK7Rgoxft9KKDXnIwS66AieCsFO8KprwR2Rcv+JNVOt1ipB4l9shUz5fseeJde7BuJEuLrsysRZyzigt2cdEh6pyS3ps1+QvWQMURargibS/f9Sk3JCWgpfHDPVrCZGpEJPruWNfJtezBmoUpm/wFvTe76JTmrCmtSZi3iTqXrPfmTVTZHmp4411KHAWV54FZCGRxIIMpsecT2h6+5oyUHVzJzhXtoYItVLBzJWek6oo13HyLELqkOKAkrDxLDOYgnAcuD5EsjsqDmNSNic2YUIslSrFYLhrJRKPZSCwf4YuRRDki1Dixzcl9Loe5HHCF8YP08WPzCsSqEKtCvAZ8HXjlIVwNYlWIKE/ICxDMAitDQIKANKLFAZ3uB6RRMAtcAaIliFchUQehBek2pNsgtkHsgNgBoQl8DaJl4ArAZoGSRr5Uz823XXzLFWs6og17pP6ERAvegj9aOX9j6d2dX72386v3dn29Ze+Jbfu/+/Dg2e1Hzm///ML2oxd3qDU7vpjwS83HX2p2HdPs+Uaz96Tm0281n32vOXRG8/kPmqM/aI6e1hw5pTl8XHPwK83+Ixc/OXBm5ycnd+z6Zvuubz7c9c223ce37Tmxbd+32/af3nbw7LZDP2w5ePb9A6ff2//9u/u/f//A6S0Hf9h2+PxHRy9+/KVm9zHN3hOa/d9q9n+rOfCd5rPvxzzwnebAd5r932r2ndTsPaHZ841m19eaj7/UbP9C89HRSx9+fvGjo5e2qy/tUGs+Vl/aefTCriM/7Dl8es/BU7v2fblz18EdH+35aOuOLVs+em/Lh29/sO2tLdve2vbRWx/t+MuOXX/Zufft3Qfe2Xvk3X1fvrf/my0Hv9125OxHRy/s+FKz88tLu766tPvri58cu7D32NlPj32//5tTB459c+DY1we++uLAl0f3f3Fk39Ejnxw5svvQkZ0Hj+489NXHR47vOPLdjqNnd6rP7/zy0q6vNbuPaXYf0+w6ptl1TLPzmOYjtWbLkQvvHjj7l33fvrX3m7f2fPnWriNv7Tz4zp5D7+89vPXTIx8eOLr94NfbD5/c8fnpHUd/+PDQ6S0Hvn1v34m3d3/1xkeH/+39fX94a8fv/rT1d3/a8vs3tvz+jff/8OYH//r2h398b8ebW/e8vf3Td3ceev+TL7fsP7Ht4PdbD3z/wYHT7+8/8+6+029+fOLft3z5z385/Ls/7f+nN/b//s39f3jz0395a/+/vXvoP7ao3/jo2Fs7T76z5/v39p3d8tn5bYcufXhE89Hnmu1HNdvVmg+PaLYcvPj+/nPv7j379u5v//zx8Tc+/Oo/thz913cP/fNbB/7pT/v+17/v+f0b+//5L4f+9T31f2z9+s8fn3p335lthy7uUGu2Kzx66cPPL245ePa9/d+9/cmJN3d+/ebOr97Y8eWftn/xx+3qP+346o2d37y5+8Rbn3z79r7T7x344YNDF7ce0Xx4VLNdrflYrdn1hWbX0Qu7D5/dc/C7PftP7Nn31e496l07D+3afmDnx4d27jzy8W71jk+++vjT4x9/9t3Ow2d3Hr24U31p55eaXV9pdn2t2XVMs/sbzZ5vNHuOaz45ofnkpGbvqTH3nNTsOaHZfUKz85jm468027/QfHhUs+2IZtthzZaDFz/47Py2w5e2H9Xs/FKz+5jmk+OafSc1+7+dxOSEn57S7D2u2X1Ms/NLzfajl7YevvD+gR/e2Xf67X3f/2Xvd2/t+fbNPaeekGjWk+Xlxuv/9OeHvlq6gQ1s4OeB1i3Hpdqrv3vj53ZkAxvYwBrMuOWYVHv1f/3p53ZkAxvYwBpoPXJM3lDmBjbwC8MskY1n6q/+05vGB7Bi89CNPxce9POX4NXPiJ/kDGycxl8cFqhiItt8/Q9vofXd82BX/XI678GB40mK/Ke581Pir/Dzb++XjTHul4hltpYstP/7v7yD/o9V5k9u/3Ph5/JzQ5m/RJi4dqrU+x//9gF6emX+WI/+VNt/DPf5+WAlxh+Zij9i14MbH3rIj/Dnaf1/Qj8f4c+T1PPQdtHD+vrJ/d/A3wPW+ECsDP7nH7ehR3Yq+pGweOiux9o8yfIj8FA/H1HPYw/nx+yfNl6fxPhp/XysP0/YL48+z091mBv4e8AugFQb/e6N7ehx3fPQCHhQIQ/u+rEaHlvPk3jyJJH3tO2u3fIkLv0t/j/59h/z5xEH+yTLj256Az8bnGmQa/if/rwD/VXKfLTZIyTx2HoegcdW+yRNPKLdp3Lpscf7JAUfXfyv7pcnV+YGfnFwS5Cp49+/9Tcp8z9j+RF40JNH17Oy+oTtPlXgPq3/T+vnY6t9wn5ZWV3BIyrZwM8PtwyZBv7DX3b8WJ+hJ7g58dBufjDIHmv/JMHxoDM/1tCPufTodp/KmUcf75McwiOqenLjJz8PP7b9qY53A38PeGTINvAf/rLj8aYb+D8ZT6LYDfyCQGQh28T//PaGMv/r46+YDmzgZ4MvD7kW/pd3NpS5gQ38kkAVId/G//vdDWVuYAO/JAQqUOjgf3tvQ5kb2MAvCaE6lLr43z/YUOYGNvBLQqQJ5R7+45YNZW5gA78kxDpQGeA/bftRZf4tD/d+EvsnrPBp6/mp7lL+VP5vYAPrwHehOsBvfPionPm0gfWT2z9hhU9bz08lmJ/K/w1sYBWJ3oYy/1ZsKHMDPz0SfagOx8o0rsFaG+N6PHT7f7b9f3Y9T1v/39LuBjbweCQHUBviNz9alzMfGmH3LT9049/H/ufy86dqdwMbeDySA6hOlGlcjxWbx0beffjJ7R/qz1/h509yXH97uxvYwOORmCjzJ4/gn9D+SZaftp6n9fMnbHcDG3g8fhJl/j3t/wu0u4ENPB4PvQOEHhZha/cqMK7BfRt/Wnv0sED/K/z8W47rp2p3Axt4IjzJU5MNbGADf28knuBNgw1sYAN/b8Qf93beBjawgZ8B0Y032jewgV8gglUodvG/v7+hzA1s4JcEKg/5Fv7fG18b2cAGflFwiZCp49//eUOZG9jALwnGSCddHvy//7HN+ABWbX7k+d7Pggf9/CV49TNi4wz818QMUeCz/197d/di11XGcfz8M62i0PpCQERDoIItiFIoShIaKtQ0tTN5Ma+TA9540aQFe1PxQrR3ggi9EUxLhTmGUEqTQGxeahprSDBN7GSSTGammczLWl6MOdmz11rPevbe58x+ZvL9XIQza6/z7Gefs37n/ZzMPvfTPZ3cx1bsrIDwhkNzlqG1M0g1+mzlelkrl+ca9sfxf/3z6u0fbH65s2aTOfD5baFPPPTbt0/+49KN7z37Qqd6MlOPJwc1nlLqMyzSSzwUFzaFg9FDFvqp2r+yT6EfTZ3ofjWHlu2n0iGjslf/8N6H56585+mfdMQrtZNYFtFN2Tma0wJhxWRb1fTf/7Pq4tNMrtpnth/l9VL1ci7utMbZ0dTYr/984vQnGzb9qJO7xKMroCi1KVUhW0fTiWblVd1vcUTTUpP+9eOpfoSD1ZzONhnuV3mYaGTnr94a/+D8k99+plMrmfK06BxlHUG2rGYXwn4rtVR7yWYzpuxHOFjN6WzZHslsxfax3/ztxJmvbniqM+QVMKgVE+1ErlNcZJr9Vlp5tVe8ss9sWeX10v+zT9mncNFVuqBQzQv73nj3+Okvf2OTcJ31AuF4dH4ndo0K8zVXc9iMsHSiLcn7rdSMfLyaQxBK6SfrLwd5XJiT6kougvqe3/XaO71Tj39tY9uNYLg0iYUhW3cePTZ+8rEnv9t2Ixi6Gg8H0JotI68eG//wsSdIJmDJltEjx8ZPkkzAlq0kEzCI+0zAoi2jR3ieCZjTfwWIV+0AQ7aOPnxtlmQCVhSfZ5JMwIoto0f+ujKZlT4gBmAoNo+Uk7k8XulzmAAGLPVoNppMAKsk//Sf/gAAB51JREFUfDS7PE4ygTZtHjnKo1nAnH4yS1HkFSCgTVtHjx4bP/k43wIDTNm25/V3/37qS1/nm9OAJS/uf+O946e/8s1NbTcCoGDkl2+Ov3/miW891XYjAAoOv/b7E6fObdj4dNuNACh4/Xd/OnX24sbv/7DtRgAUvPX2O+cvXX7m2R+33QiAgr8c/+DT/3z23NZtvUB/jqn3M8M+LXTVIi6B9en98xev3Zzc9rOXOrofU17t/mLCGw7NWYbWziDV6LOV62WtXJ5r2IVrN25Oz2wf3dVZs8kc+Py20Cceunr3i6m5+ZF9BzrVk5l6PDmo8ZRSn2GRXuKhuLApHIwestBP1f6VfQr9aOpE96s5tGw/lQ4ZlX2+4GcX3e6xbif3P9JEV0B0U3aO5rRAWDHZVjX99/+suvg0k6v2me1Heb1UvZyLO61xdjR12/t7zu3tPkxmamZ0BRSlNqUqZOtoOtGsvKr7LY5oWmrSv3481Y9wsJrT2SbD/SoPE41Me3/fuf11kylPi85R1hFky2p2Iey3Uku1l2w2Y8p+hIPVnM6W7ZHMVtzzfsG5g82SOYzTgrATuU5xkWn2W2nl1V7xyj6zZZXXS//PPmWfwkVX6YJCNfe9X3DuULcrXGe9QDgend+JXaPCfM3VHDYjLJ1oS/J+KzUjH6/mEIRS+sn6y0EeF+akupKLoL557xedG+t2224Ew6VJLAwhmY+OGg8H0JrlZB4imYAps97PP3gFCIAVd7yfc24fyQRMue78rHO7SSZgyuVZP7XgRg6STMCSi5P+1j234xckE7Dk3PWliRm3fRfJBCz56Nr8xPTiizvH2m4EQMHZzxYmZpaWk8k70YAVFyb85KzbvrvLp7cAQz6d8rfm3I69Kz7RTjKBll2Z81ML7pUDXdIIGHJt0U8vutFDPJoFLLnu/LRzOw+Xfweo7b6AR9u1JX93yY2O8X4mYMm/5/ydBffKIZIJWPLxtJ+8717eTzIBS87e9hP33Ev7SCZgCckELLpw19+c49EsYMylOX+LV4AAa656P+Xczi7vZwKW/Nf7Wef2dPkMEGDJLe+/cG4vyQRMWf7tvP0rf6GLZAItW/6/wA4UkkksgfbNrEwmsQRMKCaTWAJW9JPJK0CAIaVk8pYmYMJM8AoQgPaRTMAikglYFL6fCaB90c8AAWjZ5IPPzbbdCICCG97POLeHZAKmXOH7mYBBnzz4TQM+AwQYcu6unwh+B4hkAi07c8t/Hvx2HskEWvbRbT9xz+3Yt+JbYMQSaNnHs35y3v38IPeZgCWXl/ydJTd6mGQClvTfz+S1WcCQqcKn83g/E7BizvsF5w7xGSDAlEXvl5w7TDIBU7z3zrkuyQRMIZmARSQTsIhkAhaRTMCiYjJ5PxOwop9MPgMEGEIyAYtIJmBR6nkmyQTaFL42SyyB9pFMwKJSMoklYEL0eWbbTQGPPD4DBFhEMgGLSCZgEckELCKZgEUkE7CIZAIWDTyZ2TdFecsUyGuYzGjGSCbQVJNkpjJG9oCmSt/PjD4WjY73AqVNnSCimjrR/YalgHUu+83p1Onwz9J4KlFCEeV+gfVveMlMzSGZQB7JBCwaSDKVYZOLpDb1NThKYK3R/EKXEI9wvDQSni5Vk2MsjwPrltnPAGkSC6xbZpPZ4Tfj8SiznEzg0UUyAYtIJmARyQQsIpmARW19PzP7cuug6rRVH2hkGPeZ2QWtXPGDqtNWfaA+kjm8+kB9mv8Nvsl4L/bBPWF82HWa1AdWT/Q+s7giq55ObRLmR89Ytc6w6wOrKvs/2/YC8nin+oofSJ1sP837BFZPpW+BFQmrtkaiojVr18k2U6M+sKpqfz9zGIkaRh2SiTUp9f9nhgs0XKbR8VKFcJNQPzx7vTqpPhvWB1YPnwECLCKZgEUkE7BIk0z5iVa4NfvELDpB83SuXmV5U9VmajcPVFB6BSg6p2oyq54l9cpNaVOUfr/Zoyu9CFSpDsnEgJXuM4vLtEkYNMkUamarCTHrFyydiO4rlcZsjEu70x8LoJJKZpEmZh11mPUxS80R5meDJ08oHotcMHtQQCPC80w5Y+G4/n5GniDsXU5+tLJmfrH/8N9on9mDAhoZ1CtAqVUbrmBlMmuQbylKg3KwsyEPR8KCQH3h/9K3PC4su+zdhbA0aySzUhvRdMmxyR5ypW41E4A8zfNMWX/5ZiOUnSZELrpfYTAsJc8XTss7DY8uekagGiGZyjsQIUjR08LijtIHONzUi90WpPYrpFruk0xi8ORkliaHuQ2nyRWyZTXzNcXD3rJJTv0bnZ+tDzTS8D4zPEtqkzCYTWaKULyfHOGMYbfhpmz2UtWARmrfZ6YGo/cnchHlmtZMq3ozoTxvan72JkO4EZFrDmk+1oxoMoU7nLCCfjC1Sc5wpRuLUv/KvWh2VJov7Dc7WUAy8X9hMvtXszJCqWly3rJlo3Wip0uDQjhLxUtrOnsToLltIiQYDOWjWeFeSLhrEtZxL6103mzC5T41uxBmCvNTg4QTAyB/Ok/4MxyM3qUMZOHKgWlLqofWG8N6wDenAYtIJmARyQQsIpmARSQTsIhkAhaRTMAikglYRDIBi0gmYND/AEVV8PnZ2TVDAAAAAElFTkSuQmCC" alt="" />
串操作,C++实现的更多相关文章
- 汇编实现: C库常见函数,串操作指令作用
目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void _ ...
- 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件
基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...
- OllyDbg---循环、串操作和寻址方式
循环 字符串指令和寻址方式 循环 XOR ECX,ECX MOV ECX,15H LABEL: DEC ECX CMP ECX,0 JNE LABEL LOOP 重复循环,直到计数器的值为0,每次循环 ...
- js基础总结02--字符串操作
1.字符串中对单个字符位置的操作 indexOf(char); 从左往右查找,返回匹配到的第一个字符的位置,没有匹配则返回-1 lastiIndexOf(char); 从右往左查找,返回匹配到的第一个 ...
- python笔记9-字符串操作
1.定义字符串 字符串有下标从0开始,用[]可以来取下标 2.字符串读取 字符串可以使用循环for,每次取一个取出,循环对象的每个元素 3.字符串修改-字符串不可修改 字符串是不可变变量,一旦定义就不 ...
- go标准库的学习-strings-字符串操作
参考https://studygolang.com/pkgdoc 导入方式: import "strings" strings包实现了用于操作字符的简单函数. 常用的几个函数: f ...
- python学习笔记2-字符串操作
一.字符串切片 #切片也能适合字符串 tittle='今 天 发 苹 果' for i t in enumerate(tittle): #enumerate可以同时循环下标和值 print('%s:% ...
- Python_04-字符串操作
1 字符串的运算 字符串是程序中经常使用的元素,字符串的运算也很多,包括连接两个字符串,取一个字符串中的一部分,称为取子字符串,大小写转换,字符串与数值的转换等. 1.1 字符串的连接 ...
- python笔记02-----字符串操作
python中定义变量的字符串 str1 = "www" #str1就是字符串了 一定用引号 或者直接使用"字符串."来调用内部的方法 1.字符串大小 ...
随机推荐
- mysql-锁表机制分析(转)
为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制.一.概述MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(tab ...
- BootStrap2学习日记6---代码
<:表示“<” >:表示“>” 在BootStrap中标记代码的标签使用<code>,标记代码块使用<pre>(里面的代码特殊标签必须转义) ...
- FineUploader 学习笔记
FineUploader既是开源的又是收费的,这个没搞懂. 先看效果:
- 使用NumberPicker定制自己喜欢的Date&TimePicker
1.NumberPicker简介: NumberPicker是Android3.0之后引入的一个控件,主要功能是用于选择一组预定义好数字的控件. 该控件主要需要指导一个用于监听当前value变化的li ...
- 邮件工具类--EmailUtil
/* Copyright Notice ===================================================* * This file contains propri ...
- JS中获取table节点的tr或td的内容
<table id="tb1" width="200" border="1" cellpadding="4" ce ...
- win10 IIS10 HTTP 错误 404.2 - Not Found
环境win10系统IIS10里边发布web应用程序的时候,出现 HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页 ...
- (转载)Java NIO:NIO原理分析(二)
NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用 ...
- JAVA网络编程常见问题
一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...
- CSS3秘笈第三版涵盖HTML5学习笔记9~12章
第9章,装饰网站导航 限制访问,处于隐私方面考虑,浏览器已经开始限制可以对伪类:visited应用哪些CSS属性了.其中包括对已访问过的链接定义color.background-color.borde ...