简单的问题,从文本文件中得到相应格式的字符串

SmartHeart 2001-07-26 11:45:14
如何把类似下列格式的字符串
"\\033ABCD\\x12"
转换为以下格式的字符串
"\x1bABCD\x12"

即:
char source[] = "\\033ABCD\\x12";

char result[] = "\033ABCD\x12";

如何从source转换到result????
...全文
137 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmartHeart 2001-07-28
  • 打赏
  • 举报
回复
结贴
Szhb 2001-07-27
  • 打赏
  • 举报
回复
用CString类的Replace方法
Semigod 2001-07-27
  • 打赏
  • 举报
回复
用这一段试试
char * pSource = ....; //指向source的指针
cahr * pResult = ....; //指向result的指针,自已填吧
while (* pSource)
{
if ( *(WORD *)pSource == '\\\\')
{
* pResult++ = '\';
pSource +=2;
}
else
* pResult++ = * pSource++;
}
* pResult = NULL;
wjyasd 2001-07-27
  • 打赏
  • 举报
回复
能用就行了…… ^&^
SmartHeart 2001-07-27
  • 打赏
  • 举报
回复
临睡前up一下
SmartHeart 2001-07-27
  • 打赏
  • 举报
回复
wjyasd,好像也只能这样的。
我一直在想用sprintf 或者用 vsprintf类似的函数来完成呢。
wjyasd 2001-07-27
  • 打赏
  • 举报
回复
有点乱,你将就着看吧! 必要的参数自己修改一下:


char source[] = "\\033ABCD\\x12";
char result[] = "\033ABCD\x12";

char tmp[100];
char t1[4];
int cur=0;
int t=0;
int len=(int)strlen(source);

memset(t1,'\0',4);
for(int i=0;i<=len-1; )
{
if(source[i]=='\\' && source[i+1]=='0')
{
memset(t1,'\0',4);
strncpy(t1,&source[i+1],3);
sscanf(t1,"%i",&t);
tmp[cur++]=t;
i=i+4;
}
else if(source[i]=='\\' && source[i+1]=='x')
{
memset(t1,'\0',4);
strncpy(t1,&source[i+2],2);
sscanf(t1,"%x",&t);
tmp[cur++]=t;
i=i+3;
}
else
{
tmp[cur++]=source[i++];
}
if(i==len-1)
break;

}
wjyasd 2001-07-27
  • 打赏
  • 举报
回复
1 读如1个字符
2 判断是否为 '\',否则执行1 读入下一个字符
3 读入后一个字符,判断是否 '0' , 不是的话 1
4 转化一个8进制的数到16进制
5 循环,到结束
wjyasd 2001-07-27
  • 打赏
  • 举报
回复
让我想想!
SmartHeart 2001-07-27
  • 打赏
  • 举报
回复
up
SmartHeart 2001-07-27
  • 打赏
  • 举报
回复
up
SmartHeart 2001-07-27
  • 打赏
  • 举报
回复
不对啊,我不是要这种结果的。
以16进制表示:
source = 0x5c 0x30 0x33 0x33 0x41 0x42 0x43 0x44 0x5c 0x77 0x31 0x32
result = 0x1b 0x41 0x42 0x43 0x44 0x12

也就是说,如以下:
memcpy(result,"\033ABCD\x12",5);
这样的话,结果是上述结果。现在我想把第二个参数从文本文件中取出,文本文件中以gets的形式。可是,取出后如何转换为以上格式呢?
wjyasd 2001-07-27
  • 打赏
  • 举报
回复
gz!
SmartHeart 2001-07-27
  • 打赏
  • 举报
回复
Szhb,怎么用呢?
问题描述 设计C++类,使其能够统计文本文件字符个数,在终端显示结果,并将结果保存到指定的文件。需要统计的字符有:a、英文字母总数b、英文单词总数从c、文字符总数(包括标点符号)d、行总数e、其他字符总数(包括英文标点、空白符等)。 问题分析 从问题描述可以看到,我们所要做的就是将一篇文章(txt格式,字符格式为ANSI)出现的英文字符出现的次数进行统计。而一篇文本文件出现的字符种类和顺序没有规律,如何对当前读取的字符的种类进行判断并转入到相应的统计状态成为了问题的关键。 但是,我们知道对于英文字母其ASCII码范围在65~90和97~122两个区间,而英文单词的判断就是在相邻两个非英文字母之间夹着一串英文字母,所以我们可以在读取了第一个非英文字母后判断下一个读取的是否为英文字母,如果是便转入英文字符的处理状态,其可同时对字母个数进行统计,在读到非英文字符时退出该状态,并将英文单词数加1,然后转入“状态转换心”进行状态转换的判断。 同理,对于文字符的处理,也同上所述。但是由于文字符占两个字节,而且各个编码格式文字符的编码范围不一致,所以处理起来比较麻烦,但是原理是一致的。在本例仅对ANSI格式的编码进行处理,所以文字符每个字节的范围为0x80~0xff,不过在实际操作发现有些文字符还是被漏掉了,应该是文字符的编码范围并没有全部包括进去的原因。
英文字库生成工具 C51格式 A51格式 HZDotReader3.0: 新增从文本文件输入字符功能,可以为您所要显示的文件生成专用小字库,免除字符一个个输入的麻烦。 新增HEX文件输出功能,解决二进制输出时保留区域的填充所带来的问题。 把2.0版的重码自动删除功能改为该功能可选,以适应某些特殊应用。要允许重码输入请在设置菜单,文件输出设定去除重码自动去除项。 新增英文混合输出功能,该功能把二个半角字符作为一个汉字取模,如半角字符为单个,在其后自动插入一个空格。在混合输出状态下,不能去除重码。如从文本文件输入,则自动去除回车和换行控制符。需要混合输出请点击设置,取模字体菜单,在弹出的对话框英文混合输出项。该项功能使软件所取的字模文件用二进制输出后可直接用于大屏的显示。 新增对英文字模的常量定义,解决少量字符的大点阵专用字库字符定位问题,英文字符常量格式为:字头“CHAR_”加ASII十六进制内码,如字母“Z”为 “CHAR_5A”。 新增码表生成功能,可从菜单“输出设定”项设定使用码表或使用汉字常量检索字符在点阵的位置,在选生成字符码表后,系统输出时生成字库的内码列表,应用时,先检索字符在码表的位置,再根据字符的位置计算该字符在点阵的位置,可解决在C51汉字常量无法应用于字符串问题(C51语法把汉字常量认定是西文字符串)。产生的内码列表在汉字取模状态下A51格式为标号:HZ_INDEX,C51格式为常量数组:hzIndex[];在英文取模状态下A51格式为标号:CHAR_INDEX,C51格式为常量数组:charIndex[]。在产生字符码表的同时A51模式下生产一个代表字符总数的常量HZ_NUM或CHAR_NUM,而在C51输出模式下相应的常量则为:hzNum或charNum。 更改菜单名,更好地体现菜单的功能,原“字体设定”改为“取模字体”,原“字符取点设定”改为“取模方式”,原“文件输出设定”改为“输出设置”。 更正2.0版在点阵不为8的倍数,且纵向点取字时,对点阵进行编辑产生错误,更改某些状态下生成的字库不能重新打开编辑的错误。 如发现新的错误,敬请与作者联系

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧