| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1285 人关注过本帖, 1 人收藏
标题:删除字符串中的*
只看楼主 加入收藏
joyful
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2012-9-5
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:7 
删除字符串中的*
#include <stdio.h>
void  fun( char *a )
{
  int i=0,k;
  while(a[i]=='*') i++;
  k=i;
  while(a[i]!='\0')  
  {if(a[k+1]!='*')
  {
  a[i+1]=a[k+1];
  k++;
  }
  i++;
  }
  a[k]='\0';
}

main()
{  char  s[81];void NONO ();
   printf("Enter a string:\n");gets(s);
   fun( s );
   printf("The string after deleted:\n");puts(s);
   NONO();
}
题目是删除字符串中的‘*’除了字符串开始的*     若输入****hjj**jjh*h  则输出****hjjjjhh上面是小弟写的fun函数  为什么执行不出来啊,,求教育
搜索更多相关主题的帖子: Enter 字符串 include 
2012-09-12 23:19
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:4 
程序代码:
void modify(char *s)
{
    int   length = strlen(s);
    char* tmp = (char*)malloc(length);
    char* p = tmp;
    strcpy(tmp, s);
    while (*p == '*')
        ++p;
    while (*p)
        if (*p == '*')
            *p++ = -128;
        else
            ++p;
    for (p = tmp; *p; ++p)
        if (*p == -128)
            continue;
        else
            *s++ = *p;
    *s = '\0';
    free(tmp);
}

My life is brilliant
2012-09-12 23:52
hrc2010a
Rank: 2
等 级:论坛游民
帖 子:16
专家分:55
注 册:2012-9-12
收藏
得分:8 
你好!!!
我想这段代码对你有帮助
绝对原创!!!看到你的题目后我才写的程序
#include <stdio.h>
void  fun( char *a )
{
  int i=0,k;
  while(a[i]=='*') i++;
  k=i;
  while(a[i]!='\0')     //对字符串进行扫描
  {
    if(a[k] == '*')        
     {  
      while(a[k] != '\0')        //删除‘*’
       {     a[k]=a[k+1];
             k++;
       }
        i--;                //这一步最重要的一步!!!!楼主慢慢体会吧!!!
      }  
      i++;
      k = i;
  }
  a[k]='\0';
}
int main(void)
{
    char a[50] = "******dfk*********fdfdf*******gf";
    fun((char *)a);
    printf("%s\n",a);
    return 0;
   
}
2012-09-13 00:07
w995612220
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:139
专家分:313
注 册:2012-6-20
收藏
得分:1 
#include <stdio.h>
void  fun( char *a )
{
  int i=0,k;
  while(a[i]=='*') i++;
  k=i;
  while(a[i]!='\0')  
  {if(a[k+1]!='*')
  {
  a[i+1]=a[k+1];
  k++;
  }
  i++;
  }
  a[k+1]='\0';
}

void main()
{  char  s[81];
   printf("Enter a string:\n");gets(s);
   fun( s );
   printf("The string after deleted:\n");puts(s);
}
//void NONO ();这句什么意思呢??我是不懂..
2012-09-13 00:08
micholasmalo
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2012-6-22
收藏
得分:7 
以下是引用hrc2010a在2012-9-13 00:07:30的发言:

你好!!!
我想这段代码对你有帮助
绝对原创!!!看到你的题目后我才写的程序
#include
void  fun( char *a )
{
  int i=0,k;
  while(a=='*') i++;
  k=i;
  while(a!='\0')     //对字符串进行扫描
  {
    if(a[k] == '*')        
     {  
      while(a[k] != '\0')        //删除‘*’
       {     a[k]=a[k+1];
             k++;
       }
        i--;                //这一步最重要的一步!!!!楼主慢慢体会吧!!!
      }  
      i++;
      k = i;
  }
  a[k]='\0';
}
int main(void)
{
    char a[50] = "******dfk*********fdfdf*******gf";
    fun((char *)a);
    printf("%s\n",a);
    return 0;
   
}
楼主给分吧,他的算法绝对OK的,这里有个关键点就是要去了*,字母下沉了,再循环扫描一点要找到下个字母的地址。。
2012-09-13 20:48
joyful
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2012-9-5
收藏
得分:0 
回复 3楼 hrc2010a
我貌似真的不是很明白那个i--;能简单解释下不?分我已经给了哦。。。
2012-09-14 20:29
hrc2010a
Rank: 2
等 级:论坛游民
帖 子:16
专家分:55
注 册:2012-9-12
收藏
得分:0 
如字符串**aa***aa当我删到a后的*(下标为4,字符串为**aa**aa)时如果不(i--)的话这时i就等于5也就跳过了下标为4的*。
这个i--的总意思就是当删除了一个*后数组下标就往前移一位再重新扫描不漏掉任何一个*!!!!
讲到这里如果还不明白的话我也就没法说了!!!!!
希望楼主能理解明白!!!
2012-09-15 15:31
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
如果换成 是这样子的:
1 生成一个同样长度的数组
2 把符合条件的字符搬到新数组去
3 把新数组复制到旧数组去.
4 完毕
由于  所以借用了上面几位的代码改一下,呵呵,代码不是原创的,思想也不是,字倒是我敲的.
void modify(char *s)
{
    int   length = strlen(s);
    char* tmp = (char*)malloc(length);
    int  i,j,tag=0;
  memset(tmp,0,sizeof(tmp));
    for(j=0,i=0;i<length;i++)
    {
         if( ((s[i]=='*')&&(tag==0))||( s[i]!='*')  )
             { tmp[j]=s[i];j++;}
         else
              tag=1;
     }
    strcpy(s, tmp);
    free(tmp);
}

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2012-09-15 20:47
快速回复:删除字符串中的*
数据加载中...
 
   



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

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