标题:[求助]一道c primer plus里的复习题
只看楼主
zhk3293474
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2008-3-24
结帖率:100%
已结贴  问题点数:10 回复次数:4 
[求助]一道c primer plus里的复习题
题目:
利用if else语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替代。


疑问:将原有的每个感叹号用两个感叹号代替
 能否仅仅就用数组做到?如何做到?

刚刚思考了半天,如果使用数组,那么感叹号后面插入一个感叹号,那么后面本身在感叹号后面的字符全都要后移一位
搜索更多相关主题的帖子: 复习题 primer 
2009-10-20 18:07
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
得分:5 
当然在你输入的时候,输到#时,输入并不终止,只是之后的字符串不计入
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    char s[100][2];
    char c;
    int i=0,j,l,m=0,n=0;
    while((c=getchar())!='#')
           {
               s[i][0]=c;
               i++;
           }
           s[i][0]='#';
           s[i+1][0]='\0';
           l=i+2;
    for(i=0;i<l;i++)
        for(j=0;j<2;j++)
           {
               if(s[i][0]=='!')
               {s[i][1]='!';
               n++;}
           }
     for(i=0;i<l;i++)
        for(j=0;j<2;j++)
           {
               if(s[i][0]=='.')
               {s[i][0]='!';
               m++;}
           }
     for(i=0;i<l;i++)
        if(s[i][1]!='!')
        printf("%c",s[i][0]);
        else
        printf("%c%c",s[i][0],s[i][1]);
        printf("\n There are %d times replaces in all.\n",n/2+m);               
}
2009-10-20 21:00
zhk3293474
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2008-3-24
得分:0 
这是我自己按照题目编写的代码,数'!'和'.'没有什么问题,我是想把输入的数据放入到一个数组里面,然后打印出来看替换的是否正确,但是出现了问题

请帮忙看下我的strlen使用有什么问题,还是ch=chh[]这里数据赋值有问题?我不管输入多少字符,n永远等于1007

#include"stdio.h"
#include"string.h"
int main(void)
{char ch;
 char chh[1000];
 int count=0;
 int count2=0;
 int n,i;
first:if((ch=getchar())!='#')
 { chh[count2]=ch;
  if(chh[count2]=='!')
  {chh[count2+1]='!';
   count++;
   count2+=2;
  }
  if(chh[count2]=='.')
    {chh[count2]='!';
        count++;
        count2++;
     }
  goto first;
}   
      n=strlen(chh);
printf("tidai le %d ci\n",count);
/*for(i=0;i<n;i++)
printf("%c",chh[i]);*/
printf("%d",n);
return 0;
}
2009-10-22 14:42
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
得分:5 
字符数组chh停止输入后,你没赋上结束符0,用strlen获取字符串上度就出错。
goto改用while,count2下标移动有问题,改正如下:
程序代码:
#include"stdio.h" 
#include"string.h" 
int main(void) 
{char ch; 
char chh[1000]; 
int count=0; 
int count2=0; 
while((ch=getchar())!='#') 
{ chh[count2]=ch; 
  if(chh[count2]=='!') 
    { 
     chh[count2+1]='!'; 
     count++; 
     count2++; 
    } 
  if(chh[count2]=='.') 
    { 
     chh[count2]='!'; 
     count++; 
    } 
  count2++; 
} 
chh[count2]=0; 
printf("tidai le %d ci\n",count); 
printf("%s\n%d\n",chh,strlen(chh)); 
return 0; 
}

努力—前进—变老—退休—入土
2009-10-22 16:16
zhk3293474
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2008-3-24
得分:0 
非常感谢2楼和4楼
2009-10-22 16:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-289261-1-1.html




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

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