| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:换看一本c书,有些问题,望大虾指导!
取消只看楼主 加入收藏
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:4 
换看一本c书,有些问题,望大虾指导!
1楼



第四道题:编辑一程序把它的输入复制到输出,并在此过程将相连的多个空格用一个空格代替。



希望那位朋友帮我把上面的题做一下,我做了一下午没做出来

include<stdio.h>
#include<string.h>
main()
{
    long int c;
    int i=0,t;
    char a[80],*q,*p;
      c=getchar();
   while(c!=EOF)
      {a[i]=c;i++;c=getchar();}
         a[i]='\0';
     q=a; /* 把a的地址赋值给指针p */
    while(*q!='\0')
    {
       while(*q!=' ')q++;/* 跳过前面的字符,除空格 */
       if(*q==' '&&*(q+1)==' ')
       {   p=q+1;
          while(*p!='\0')
          {
             *p=*(p+1);
             p++;
          }
       }
       q++;
    }
     puts(a);
    getch();

这个程序功能没达到呀!只能删一个空格!

[ 本帖最后由 xinbuzai 于 2010-7-13 17:21 编辑 ]
搜索更多相关主题的帖子: 指导 
2010-07-13 09:39
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
收藏
得分:0 
有没有人帮我把第四道题做一下呀!我做了半天也没做出来!
2010-07-13 17:19
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
收藏
得分:0 
#include<stdio.h>
#include<string.h>
main() {
    long int c;
    int i=0;
    char a[80],*q,*p;
    c=getchar();
    while(c!=EOF)
    {
        a[i]=c;
        i++;
        c=getchar();
    }
    a[i]='\0';/* 把字符串输入到数组a中 */

    q=a; /* 把a的地址赋值给指针p */
    while(*q!='\0')
    {
        while(*q!=' ')q++;/* 跳过前面的字符,除空格 */
        while(*q==' '&&*(q+1)==' ')/* 判断是否有两个空格相连,如果有,则执行循环体 */
        {
            p=q+1;

            while(*p!='\0')
            {
                *p=*(p+1);
                p++;
            }/* 整体顺序前移第二个格后的字符串*/

        }/* 当移动后如果第一个字符不是空格,则终止循环 */
        q++;
    }
    puts(a);
    getch();
}
搞好了!还有更简单的方法!
2010-07-13 18:30
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
收藏
得分:0 
题目:编辑一个程序,把输入复制到输出,如果输入过程中有连续多个空格相连,则只输出一个空格!以下是我写出的五个程序,当然有zotin的点拨,更多的是自己的思考!希望能对像我一样的初学者一定的思考。

方法一:

#include<stdio.h>
#include<string.h>
main()
{
   long int c;
   int i=0,t;
   char a[80];
   int firstSpace = 1;
   c=getchar();
   while(c!=EOF)
   {
      if(c==' '&&firstSpace)
      {
         a[i++]=c;firstSpace=0;
       }
      if(c!=' ')
      {
         a[i++]=c;firstSpace=1;
      }
      c=getchar();
   }
   a[i] = '\0';
   puts(a);
   getch();
}





方法二:

#include<stdio.h>
#include<string.h>

main()
{
   long int c;
   int i=0,t;
   char a[80];
   int firstSpace = 1;
   c=getchar();
   while(c!=EOF)
   {
      if (c != ' '||firstSpace  )/* c不是空格则赋值到数组元素中,如果是空格,
      则看firstSpace是不是真,是真说明是第一个空格,同样地赋值到数组中,
      如果不是真说明不是第一个空格,则忽略不记 */
      {
         a[i]=c;
         i++;
         firstSpace = 0;/* 这里当c不是空格也把firtspace设为0,是不合理的 */
      }
      if(c != ' ') /*当c不是空格时,firstSpace置1,这样做的目的是当时遇到下一个空格,
      那么这个空格就是第一个空格  */
      {
         firstSpace = 1;
      }
      c=getchar();
   }
   a[i] = '\0';
   puts(a);
   getch();
}


方法三#include<stdio.h>
#include<string.h>
main() {
    long int c;
    int i=0;
    char a[80],*q,*p;
    c=getchar();
    while(c!=EOF)
    {
        a[i]=c;
        i++;
        c=getchar();
    }
    a[i]='\0';/* 把字符串输入到数组a中 */
/* 程序思想:程序从头往后测试字符串的每一个字符,a不是空格则跳过;b当遇到空格,
则再判断紧接这个空格后的字符是不是空格,c如果是,则把这第一个空格后的字符串整体前移,以替换掉空格
,d然后再判断紧接后面是不是空格,是,则再移,如果不是,继续往后测试,重复abcd */
?
    q=a; /* 把a的地址赋值给指针p */
    while(*q!='\0')
    {
        while(*q!=' ')q++;/* 跳过前面的字符,除空格 */
        while(*q==' '&&*(q+1)==' ')/* 判断是否有两个空格相连,如果有,则执行循环体 */
        {
            p=q+1;

            while(*p!='\0')
            {
                *p=*(p+1);
                p++;
            }/* 整体顺序前移第二个格后的字符串*/

        }/* 当移动后如果第一个字符不是空格,则终止循环 */
        q++;
    }
    puts(a);
    getch();
}
方法四:

#include<stdio.h>
#include<string.h>
liuonespace(char *p)
{
   char b[80];
   int i,j=0,firtspace=1;/* 设置空格标志,首先赋初值1 */
   for(i=0;p[i]!='\0';i++)
   {
     if(p[i]!=' '||firtspace) /* 首次不管是遇到空格还是其它都能运行下面的语句 */
      {
        b[j++]=p[i];/*  */
        firtspace=0;
      }
     if(p[i]!=' ')
      {
         firtspace=1;
      }
    }     /* 循环终止条件是遇到字符串结束符 */
    b[j]='\0'; /* 放置字符串结束标志 */
    strcpy(p,b);/* 复制字符串,从b到p,也就是从b到a */
 }
main()
{
   long int c;
   char a[80];
   int i=0;
   c=getchar();
   while(c!=EOF)
   {
      a[i]=c;
      i++;
      c=getchar();
   }
   a[i]='\0';/* 从键盘输入字符串到数组a中 */
   puts(a);
   puts(liuonespace(a));
   getch();
}





方法五:



#include<stdio.h>
#include<string.h>
main()
{
    long int c;
    int i,j,space;
    char a[80],b[80];
    i=0;
    c=getchar();
    while(c!=EOF)
    {
        a[i]=c;
        i++;
        c=getchar();
    }
    a[i]='\0';

    j=0;space=1;
    for(i=0;a[i]!='\0';i++)
    {
       if(a[i]==' '&&space)
       {
          b[j++]=a[i];
          space=0;
       }
       if(a[i]!=' ')
       {
          b[j++]=a[i];
          space=1;
       }
    }
    b[j]='\0';
    puts(b);
    getch();
 }
2010-07-13 23:31
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
收藏
得分:0 
回复 4楼 sidooh
哈哈哈,兄弟的算法更直接。不过,我在做这题时,在用EOF!
2010-07-13 23:43
快速回复:换看一本c书,有些问题,望大虾指导!
数据加载中...
 
   



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

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