📄 strhandle.cc
字号:
// strhandle.cc
/*/////////////////////////////////////////////////////////////////////////////
李亦
2006.06.
/*//////////////////////////////////////////////////////////////////////////////
#include "platform/platform.h"
namespace CS
{
char *BreakString(char *svLines, char *svTok)
{
char *p,
*s;
char *tok;
p=svLines;
if(p==NULL)
return NULL;
while(*p != '\0')
{
for(s = p, tok = svTok; (*s) && (*tok); s++, tok++)
{
if((*s) != (*tok))
break;
}
if((*tok) == '\0')
{
*p = '\0';
return p + dStrlen(svTok);
}
p++;
}
return NULL;
}
// What escapestring returns must be FREEd.
char *EscapeString(char *svStr)
{
// Determine final size
int nEscapes = 0,
i,
count;
count = dStrlen(svStr);
for(i=0; i < count; i++)
{
switch(svStr[i])
{
case '\a':
case '\b':
case '\f':
case '\n':
case '\r':
case '\t':
case '\v':
case '\\':
nEscapes++;
break;
default:
if(svStr[i] < ' ' || svStr[i] > '~')
nEscapes+=3;
break;
}
//if(svStr[i] =='\a') nEscapes++;
//else if(svStr[i]=='\b') nEscapes++;
//else if(svStr[i]=='\f') nEscapes++;
//else if(svStr[i]=='\n') nEscapes++;
//else if(svStr[i]=='\r') nEscapes++;
//else if(svStr[i]=='\t') nEscapes++;
//else if(svStr[i]=='\v') nEscapes++;
//else if(svStr[i]=='\\') nEscapes++;
//else if(svStr[i]<' ' || svStr[i]>'~') nEscapes+=3;
}
// Allocate output buffer
UINT nLen = dStrlen(svStr) + nEscapes;
char *svOutBuf = (char*)dMalloc(nLen + 1);
// Escape things
int j=0;
char c;
for(i = 0;i < count; i++)
{
c = svStr[i];
switch(svStr[i])
{
case '\a':
case '\b':
case '\f':
case '\n':
case '\r':
case '\t':
case '\v':
case '\\':
{
svOutBuf[j] = '\\';
svOutBuf[j+1] = 'a';
j += 2;
}
break;
default:
if(c >= ' ' && c <= '~')
{
svOutBuf[j] = c;
j++;
}
else
{
dSprintf(svOutBuf + j,nLen - j, "\\x%1.1X%1.1X", (c>>4), c&15);
j+=4;
}
break;
}
//if(c>=' ' && c<='~') { svOutBuf[j]=c; j++; }
//else if(c=='\a') { svOutBuf[j]='\\'; svOutBuf[j+1]='a'; j+=2; }
//else if(c=='\b') { svOutBuf[j]='\\'; svOutBuf[j+1]='b'; j+=2; }
//else if(c=='\f') { svOutBuf[j]='\\'; svOutBuf[j+1]='f'; j+=2; }
//else if(c=='\n') { svOutBuf[j]='\\'; svOutBuf[j+1]='n'; j+=2; }
//else if(c=='\r') { svOutBuf[j]='\\'; svOutBuf[j+1]='r'; j+=2; }
//else if(c=='\t') { svOutBuf[j]='\\'; svOutBuf[j+1]='t'; j+=2; }
//else if(c=='\v') { svOutBuf[j]='\\'; svOutBuf[j+1]='v'; j+=2; }
//else if(c=='\\') { svOutBuf[j]='\\'; svOutBuf[j+1]='\\'; j+=2; }
//else {
// dSprintf(svOutBuf+j,"\\x%1.1X%1.1X",(c>>4),c&15);
// j+=4;
//}
}
svOutBuf[j] = '\0';
return svOutBuf;
}
char *UnescapeString(char *svStr)
{
int len = dStrlen(svStr);
char *svTemp;
// Count number of '%' characters
int nCount;
nCount = 0;
svTemp = svStr;
while(*svTemp)
{
if(*svTemp == '%')
nCount++;
svTemp++;
}
// Allocate memory
UINT nSize = dStrlen(svStr) + nCount;
svTemp = (char *)dMalloc(nSize + 1);
if(svTemp == NULL)
return NULL;
dMemset(svTemp,0,nSize + 1);
// Convert string to preserve '%' chars
char *svCvtTo,
*svCvtFrom;
svCvtFrom = svStr;
svCvtTo = svTemp;
while(*svCvtFrom)
{
if(*svCvtFrom == '%')
{
*(svCvtTo++) = '%';
}
*(svCvtTo++) = *(svCvtFrom++);
}
// Convert escape chars (funky kludge, eh?)
dSprintf(svStr,len,svTemp);
dFree(svTemp);
return svStr;
}
};//namespace CS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -