免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 11324 | 回复: 35
打印 上一主题 下一主题

[C] How to del a character from a string? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-08 10:53 |只看该作者 |正序浏览
For example , char str[50] ="I like XH,but she doesn't like me";

                        char del       =  'e';

After   executing the code, the result str should   not contain character 'e',

that is to say, str should be modifyed to"I lik XH,but sh dosn't lik m"

I write a solution,but  it  requires  temporary  memory.

Any suggestion  to improve it?

Thx

论坛徽章:
0
36 [报告]
发表于 2008-04-12 18:34 |只看该作者
原帖由 思一克 于 2008-4-8 10:59 发表
c = 'e';
cp = strchr(str, c);
if(cp)
    strcpy(cp, cp+1);

妙!

论坛徽章:
0
35 [报告]
发表于 2008-04-11 13:02 |只看该作者

回复 #1 wilbur8415 的帖子

void DeleteChar(char *pStr, char cBeDlt)
{
        char *pRead, *pWrite;
       
        pRead = pStr;
        pWrite = pStr;
        while (*pRead != '\0')
        {
                if (*pRead != cBeDlt)
                {
                        *pWrite++ = *pRead++;
                        continue;
                }
                pRead++;
        }
        *pWrite = *pRead;
}
我觉得我这个效率还行吧,^_^

[ 本帖最后由 alickexu 于 2008-4-13 00:01 编辑 ]

论坛徽章:
0
34 [报告]
发表于 2008-04-11 11:56 |只看该作者
may not 应该是翻译为不可以,禁止性质的!

论坛徽章:
0
33 [报告]
发表于 2008-04-10 18:37 |只看该作者
原帖由 dpsuffix 于 2008-4-10 17:09 发表
不用实验阿,看看strcpy代码咋实现的不就完了吗?
char *strcpy(char *dest, const char *src)
{
    char *tmp = dest;

    while ((*dest++ = *src++) != '\0')
        /* nothing */;
    return t ...


不能假设所有版本的libc的strcpy的都是这样实现的吧.

论坛徽章:
0
32 [报告]
发表于 2008-04-10 17:09 |只看该作者
不用实验阿,看看strcpy代码咋实现的不就完了吗?
char *strcpy(char *dest, const char *src)
{
    char *tmp = dest;

    while ((*dest++ = *src++) != '\0')
        /* nothing */;
    return tmp;
}

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
31 [报告]
发表于 2008-04-09 09:37 |只看该作者
原帖由 gaochang2008 于 2008-4-9 09:34 发表
设置2个临时变量 不就得了,,对于may not 需要进行实验 ,但是使用临时变量进行strcpy一定是 must

这样开销就大多了

论坛徽章:
0
30 [报告]
发表于 2008-04-09 09:34 |只看该作者

回复 #29 思一克 的帖子

设置2个临时变量 不就得了,,对于may not 需要进行实验 ,但是使用临时变量进行strcpy一定是 must

论坛徽章:
0
29 [报告]
发表于 2008-04-09 09:12 |只看该作者
也同意你, 根据标准小心就是了.

(strcpy) may not 准确翻译不应该是"不可以". 而是, 可能不可以. 就是有的时候不可以, 有时候可以.
(memcpy) The memory areas should not overlap 才是"不可以", "不应该". "应该不". 任何时候都不
(memmove) The memory areas may overlap 可能.

否则你如何区分同一个库中的"may not", "should not"?

-------------------
原帖由 whyglinux 于 2008-4-8 23:10 发表
cjaizss  的意见是正确的。

man 中写得很清楚:The strings  may not overlap,翻译过来就是:(这两个)字符串不可以重叠。如果拷贝的空间重叠了,C 标准的规定也很明确:产生无定义行为。

>> 你可以实验 ...

论坛徽章:
0
28 [报告]
发表于 2008-04-08 23:13 |只看该作者
那去JAVA吧
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP