| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 521 人关注过本帖
标题:编的程序不正确,,,,请高手指点。。。
只看楼主 加入收藏
赵贺辉
Rank: 2
来 自:河南
等 级:论坛游民
帖 子:28
专家分:19
注 册:2011-3-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
编的程序不正确,,,,请高手指点。。。
功能:是字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于则什么也不做,字符串中间和尾部的*号不删除。
如输入内容为:若n=3
******A*B*CD**G****
***A*B*CD**G****

#include<stdio.h>
void fun(char *a,int n)
{
    int i;
    char *p;
    p=a;
    while(a[i]=='*')
        i++;
    if(i>n)
        a=p+(i-n);
}
main()
{
    char s[81];int n;
    printf("Enter a string:\n");gets(s);
    printf("Enter n:");scanf("%d",&n);
    fun(s,n);
    printf("The string after deleted:\n");
    puts(s);
}
搜索更多相关主题的帖子: 字符串 
2011-03-22 22:50
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:4 

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-22 23:54
chenwei435
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:322
专家分:1611
注 册:2010-11-28
收藏
得分:10 
程序代码:
#include<stdio.h>
void fun(char a[81],char b[81],int n)
{
    int i=0,j,k;
    k=strlen(a);
    if( i>n )
    i=i-n+1;
    for( j=0;j<=k;j++ )
        *(b+j)=*(a+i+j);
    *(b+j)='\0';
}
void main()
{
    char s1[81],s2[81];int n;
    printf("Enter a string:\n");
    gets(s1);
    printf("Enter n:");
    scanf("%d",&n);
    fun(s1,s2,n);
    printf("The string after deleted:\n");
    puts(s2);
}

我重些了一份,上面的代码好多漏洞,修改后的没有漏洞了:
程序代码:
#include<stdio.h>
char *fun(char a[81],char b[81],int n)
{
    int i=0,j,k;
    k=strlen(a);
    while(a[i]=='*')
        i++;
    if( i>n )
    {
    i=n;
    for( j=0;j<=(k+n-1);j++ )
        *(b+j)=*(a+i+j);
    *(b+j)='\0';
    return b;
    }
    else 
    return a;
}
void main()
{
    char s1[81],s2[81];int n;
    printf("Enter a string:\n");
    gets(s1);
    printf("Enter n:");
    scanf("%d",&n);
    printf("The string after deleted:\n");
    puts(fun(s1,s2,n));
}



[ 本帖最后由 chenwei435 于 2011-3-23 07:19 编辑 ]
2011-03-23 00:28
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
收藏
得分:4 
int k=0;
For(int i = 0; i < 81; i++)
{
   if(a[i] == '*')
   {
       if(k < 4) k++;
       else  a[i] = a[1+i--];
   }
   else k=0;
}
按我这个思路去想吧!
2011-03-23 08:22
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
收藏
得分:0 
忘了,那个else 后还要加个k=0
2011-03-23 08:25
月清晖
Rank: 2
等 级:论坛游民
帖 子:16
专家分:43
注 册:2011-3-5
收藏
得分:2 
回复 3楼 chenwei435
连这个漏洞都知道哟?
果然高手!
2011-03-23 13:10
赵贺辉
Rank: 2
来 自:河南
等 级:论坛游民
帖 子:28
专家分:19
注 册:2011-3-18
收藏
得分:0 
回复 3楼 chenwei435
你好,我想问一下这个地方    for( j=0;j<=(k+n-1);j++ )   j为什么小于等于k+n-1,我感觉小于等于k-1就行了,麻烦你在帮我看看,谢谢!
2011-03-23 22:29
赵贺辉
Rank: 2
来 自:河南
等 级:论坛游民
帖 子:28
专家分:19
注 册:2011-3-18
收藏
得分:0 
回复 2楼 ansic
谢谢!!
2011-03-23 22:31
赵贺辉
Rank: 2
来 自:河南
等 级:论坛游民
帖 子:28
专家分:19
注 册:2011-3-18
收藏
得分:0 
回复 4楼 zanzan1986
谢谢
2011-03-23 22:31
快速回复:编的程序不正确,,,,请高手指点。。。
数据加载中...
 
   



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

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