wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2332回复:26

能怎么办呢?

楼主#
更多 发布于:2002-08-15 10:06
我真的是在是搞不定下面这个字符替换函数,哪位帮忙改一下,给分!

#define BUFSIZE 1024
//Stringlist 原字符串;
//Replacechar 替换字符串;
//Mchar 被替换的字符串;
LPTSTR Replacestr(LPTSTR &Stringlist,LPTSTR Replacechar,char Mchar)
{

TCHAR newBuffer[BUFSIZE];   // buffer for string

int i = 0;

for( i=0;i<=BUFSIZE&&Stringlist!=0;i++ )

{
if(Stringlist == Mchar)
         strcat(newBuffer,Replacechar);
else
newBuffer = Stringlist;
}
return(Stringlist);
MessageBox(NULL,Stringlist,\"gotit\",MB_OK);
}
我爱夏天。
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-15 10:21

#define BUFSIZE 1024
//Stringlist 原字符串;
//Replacechar 替换字符串;
//Mchar 被替换的字符串;
LPTSTR Replacestr(LPTSTR &Stringlist,LPTSTR Replacechar,char Mchar)
{

TCHAR newBuffer[BUFSIZE];   // buffer for string

int i = 0;

for( i=0;i<BUFSIZE&&Stringlist!=\'\\0\';i++ )

{
if(Stringlist == Mchar)
         {strcat(newBuffer,Replacechar);
i+=strlen(Replacechar);}
else
newBuffer = Stringlist;
}
return(newBuffer);
MessageBox(NULL,Stringlist,\"gotit\",MB_OK);
}
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-15 10:21

#define BUFSIZE 1024
//Stringlist 原字符串;
//Replacechar 替换字符串;
//Mchar 被替换的字符串;
LPTSTR Replacestr(LPTSTR &Stringlist,LPTSTR Replacechar,char Mchar)
{

TCHAR newBuffer[BUFSIZE];   // buffer for string

int i = 0;

for( i=0;i<BUFSIZE&&Stringlist!=\'\\0\';i++ )

{
if(Stringlist == Mchar)
         {strcat(newBuffer,Replacechar);
i+=strlen(Replacechar);}
else
newBuffer = Stringlist;
}
return(newBuffer);
MessageBox(NULL,Stringlist,\"gotit\",MB_OK);
}
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-08-15 10:30
上面那个字符定义有没有问题呢?char

编译起来通不过
我爱夏天。
trent
驱动老牛
驱动老牛
  • 注册日期2002-03-01
  • 最后登录2014-09-18
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望185点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-15 10:34
LPTSTR Replacestr(LPTSTR &Stringlist,LPTSTR Replacechar,char Mchar)
{

TCHAR newBuffer[BUFSIZE+1]; // buffer for string

int i=0;
int j=0;
memset(newBuffer,0,BUFSIZE+1);
for( i=0;j<BUFSIZE&&Stringlist(i)!=0;i++ )//注意是<而不是<=

{
if(Stringlist(i) == Mchar)  //中括号显示不出来,用()代
{
strcat(newBuffer,Replacechar);
j+=strlen(Replacechar);
}
else
{
newBuffer(j++) = Stringlist(i);
}
}
return(newBuffer);
MessageBox(NULL,Stringlist,\"gotit\",MB_OK);
}

我没试行不行,你试试看
建议为newBuffer多申请一个字节空间值为0,避免缓冲区溢出啦 。而且你要确信替换后的字符串长度不会超过BUFSIZE:D



[编辑 -  8/15/02 by  trent]
我不仅要金子,我还要点石成金的手指!
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-08-15 11:01
效果没出来,不知道是怎么回事。没有提示,也没有结果输出,程序在使用这个函数的时候出错了...
我现在怀疑自己根本不可能搞定它了 :(
我爱夏天。
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-08-15 11:17
调试到这个函数时报出一个unhandled exception
后面信息是access violation
我爱夏天。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-08-15 11:33
faint++,什么呀?
你到底要实现什么样的功能?说清楚啊。

#define BUFSIZE 1024
//Stringlist 原字符串;
//Replacechar 替换字符串;
//Mchar 被替换的字符串;
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-08-15 11:42
好吧,我就清楚一点说,我想写一个字符替换函数

#define BUFSIZE 1024  //这一句指定缓冲区空间大小

现在有一个字符串,Stringlist是它的指针,我用 Replacechar指向的字符串替换Mchar


我爱夏天。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-08-15 11:51
Replacechar是个字符串,Mchar是字符啊。
用字符串替换字符?
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2002-08-15 11:54
我就是觉得有一点不对劲,那把Mchar换成字符串的形式吗?
我爱夏天。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2002-08-15 12:00
。。。。你到底要干什么?我昏了。
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2002-08-15 12:02
。。。。你到底要干什么?我昏了。


我只是想把 Mchar 代表的字符替换掉啊,难道我说话真的很糊涂吗?
我爱夏天。
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2002-08-15 12:04
只是替换字符串,真的有那么难吗?
我爱夏天。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2002-08-15 12:18
TCHAR szBuffer[BUFFER_SIZE];  // 假定已经赋值了
TCHAR* SrcString = szBuffer[0];
TCHAR mchar;       // 要替换的
THCAR nchar;       // 替换成nchar

mchar=_T(\'a\');
nchar _T(\'b\');

while (*SrcString != _T(\\0\'))   //没有到末尾
{
   if (*SrcString == mchar)
   {
      *SrcString=nchar;
      break;
   }
   SrcString++;    // 指向下个字符
}

方法很多。
aiherong
驱动牛犊
驱动牛犊
  • 注册日期2002-06-07
  • 最后登录2007-01-10
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-08-15 12:22
用我的吧!运行没问题,如果替换单个字符,就把它写成strlen=1的字符串。祝你顺利!
LPTSTR Replacestr(LPTSTR Stringlist,LPTSTR Matchstring,LPTSTR Replacestring)
{
LPTSTR newBuffer=_T(\"\");
char*p1,*p2;
p1 = Stringlist;
p2 = strstr(Stringlist,Matchstring);
while (p2 != NULL)
{
strncat(newBuffer,p1,(p2-p1));
strcat(newBuffer,Replacestring);
p1 = p2 + strlen(Matchstring);
p2 = strstr(p1,Matchstring);
}
strcat(newBuffer,p1);
return newBuffer;
}
aiherong
驱动牛犊
驱动牛犊
  • 注册日期2002-06-07
  • 最后登录2007-01-10
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-08-15 12:31
举个例子
一、替换字符串:
LPTSTR s1,s2,s3;
s1= \"I love you,But I love Betty more!\";
s2= \"Betty\";
s3 = \"Hellen\";
MessageBox(Replacestr(s1,s2,s3));
    结果:\"I love you,But I love Hellen more!\"

二、替换单个字符:
LPTSTR s1= \"I love you,But I love Betty more!\";
LPTSTR s2= \"I\";
LPTSTR s3 = \"Jack\";
MessageBox(Replacestr(s1,s2,s3));
    结果:\"Jack love you,But Jack love Betty more!\"
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
17楼#
发布于:2002-08-15 13:01
_T(\"\")
这个声明需要什么头文件?
出错了...
我爱夏天。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2002-08-15 13:47
tchar.h
你可以用tchar,没有包含他吗?
wsgfaust
驱动小牛
驱动小牛
  • 注册日期2002-07-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2002-08-15 13:56
我换了TCHAR,还是出现运行出错,编译与链接都通过了,执行就爆出非法内存操作:(
我爱夏天。
上一页
游客

返回顶部