| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 672 人关注过本帖, 2 人收藏
标题:字符删除的问题
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏(2)
已结贴  问题点数:18 回复次数:9 
字符删除的问题
输入****adf**sd**sad***sa*******
运行程序后输出****adfsdsadsa*******.即只删除两端都是字母的连续*。
代码如下:
#include <stdio.h>

void  fun(char * a, char * h, char * p)
{
    char * s;

    s = h;
    while (  h != p )
    {   
        if (* h == '*')
        {
        s = h;
        while (* s != '\0')
            * s = * (++s);
        }
        else
            s = ++h;
    }
}

int  main ()
{
    char s[81], * t, * f;
    printf("Enter a string : \n");
    gets(s);
    t = f = s;
    while (* t)  t++; t--;
    while (* t == '*')  t--;
    while (* f == '*')  f++;
    fun(s, f, t);
    printf("The deleted string is :");
    puts(s);
    return 0;
}
但是我输入输入****adf**sd**sad***sa*******后回车没有任何反应,就算子函数把输入字符串搞的乱七八糟那也应该输出点东西吧,puts(s);貌似什么都没做?求解答。
搜索更多相关主题的帖子: 字母 运行程序 include Enter 
2011-12-24 11:51
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
好像被人关注了很多次了。就这一特例,只需要对字符串扫描一遍就可以完成。

不过,实际中存在大量这样的应用,这一点上,用正则表达式是最方便的。

如果我没记错,这应该是BlueGuy的专长。愿意的话,BG来个正则的演示如何?

重剑无锋,大巧不工
2011-12-24 13:09
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 beyondyf
........

梅尚程荀
马谭杨奚







                                                       
2011-12-24 16:11
倚楼听风雨
Rank: 2
等 级:论坛游民
帖 子:33
专家分:38
注 册:2011-9-25
收藏
得分:5 
while (* t)  t++; t--;
你确定???
2011-12-24 16:22
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 4楼 倚楼听风雨
恩 是的。

梅尚程荀
马谭杨奚







                                                       
2011-12-24 16:37
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
都去过平安夜了?那我先扔块砖吧。
程序代码:
#include<stdio.h>
void filter(char * str, char key)
{
    char *ps, *pm, *pe;
    for(ps = str; *ps == key; ps++);
    for(pe = pm = ps; *pm != '\0'; pm++)
    {
        if(*pm == key) continue;
        *(ps++) = *pm;
        pe = pm;
    }
    for(pe++; *pe != '\0'; *(ps++) = *(pe++));
    *ps = '\0';
}
int main()
{
    char str[128];
    gets(str);
    filter(str, '*');
    printf("%s\n", str);
    return 0;
}




重剑无锋,大巧不工
2011-12-24 20:40
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:5 
以下是引用beyondyf在2011-12-24 13:09:59的发言:

好像被人关注了很多次了。就这一特例,只需要对字符串扫描一遍就可以完成。

不过,实际中存在大量这样的应用,这一点上,用正则表达式是最方便的。

如果我没记错,这应该是BlueGuy的专长。愿意的话,BG来个正则的演示如何?

:%s/\([a-z]\)\*\+\([a-z]\)/\1\2/g

我就是真命天子,顺我者生,逆我者死!
2011-12-24 21:22
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
正则表达式的构造很有意思的。思路不同,构造的方式不同。下面是我构造的正则表达式。
很抱歉,我熟悉的是在C#下的用法,下面是正则替换的C#语句
str = Regex.Replace(str, @"([^*])\*+(?=[^*])", @"$1");
简单解释一下,Regex是一个正则类。不同于perl直接在语言层面集成了正则表达式,C#(其它语言几乎都是)是通过该类来完成正则表达式的功能的。
参数中,str是一个字符串对象,为待匹配文本,第二个字符串为匹配模式,第三个字符串为替换模式。

重剑无锋,大巧不工
2011-12-25 00:25
lyl59840
Rank: 2
等 级:论坛游民
帖 子:25
专家分:22
注 册:2011-12-14
收藏
得分:5 
新手
求解释 正则运算
2011-12-25 02:51
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
#include <stdio.h>

void  fun(char * a, char * h, char * p)
{
    char * s;
   

    s = a;
    while (s <= h)
    {
        *(a++) = * (s++);
    }
    while (s <= p)
    {
        if (*s != '*')
            *(a++) = *s;
        s++;
    }
    while (*s != 0)
    {
        *(a++) = *(s++);
    }
    *a = 0;
}

int  main ()
{
    char s[81], * t, * f;
    printf("Enter a string : \n");
    gets(s);
    t = f = s;
    while (* t)  t++; t--;
    while (* t == '*')  t--;
    while (* f == '*')  f++;
    fun(s, f, t);
    printf("The deleted string is :");
    puts(s);
    return 0;
}
这个就可以
图片附件: 游客没有浏览图片的权限,请 登录注册
  比较发现要对形参a实施操作否则程序没反应?
不懂什么是正则匹配,它对实参形参之间的传递有影响?

梅尚程荀
马谭杨奚







                                                       
2011-12-25 08:51
快速回复:字符删除的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032687 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved