zoukankan      html  css  js  c++  java
  • c程序设计语言第一章3

    字符数组是C语言中最常用的数组类型。下面我们通过编写一个程序,来说明字符数组以
    反操作字符数组的函数的用法。该程序读入一组文本行,并把最长的文水行打印出来。该算
    法的基本框架非常简单:
      while (还有未处理的行)
      i f (该行比已处理的最长行还要长)
      保存该行
      保存该行的长度
      打印最长的行

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define MAXLENGTH 100//文本的最大长度
     4 int getline(char line[],int limit);
     5 void copyline(char to[],char from[]);
     6 int main()
     7 {
     8     int length;//当前行的长度
     9     int maxlength=0;//最大行的长度
    10     char line[MAXLENGTH];//保存当前行的字符串
    11     char longest[MAXLENGTH];//保存最大行的字符串
    12     while((length=getline(line,MAXLENGTH))>0)
    13     {
    14         if(length>maxlength)
    15         {
    16             maxlength=length;
    17             copyline(longest,line);
    18         }
    19     }
    20     if(maxlength>0)
    21     {
    22         printf("%s",longest);
    23     }
    24     return 0;
    25 }
    26 /*getline函数:将输入的字符保存到line数组中,并返回数组长度*/
    27 int getline(char line[],int limit)
    28 {
    29     int c;
    30     int i;
    31     for(i=0;i<(limit-1)&&(c=getchar())!=EOF&&c!='
    ';i++)
    32     {
    33         line[i]=c;
    34     }
    35     if(c=='
    ')
    36     {
    37         line[i]=c;
    38         ++i;
    39     }
    40     line[i]='';
    41     return i;
    42 }
    43 /*copyline函数:经最长字符串保存到to数组中*/
    44 void copyline(char to[],char from[])
    45 {
    46     int i=0;
    47     while((to[i]=from[i])!='')
    48         ++i;
    49 }

    运行结果:

    练习1.16修改打印最长文本行的程序的主程序m a i n,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define MAXLENGTH 15//文本的最大长度
     4 int getline(char line[],int limit);
     5 void copyline(char to[],char from[]);
     6 int main()
     7 {
     8     int length;//当前行的长度
     9     int maxlength=0;//最大行的长度
    10     char line[MAXLENGTH];//保存当前行的字符串
    11     char longest[MAXLENGTH];//保存最大行的字符串
    12     printf("The maxlength of string is 15.
    ");
    13     while((length=getline(line,MAXLENGTH))>0)
    14     {
    15         printf("%2d:%s",length,line);
    16         if(length>maxlength)
    17         {
    18             maxlength=length;
    19             copyline(longest,line);
    20         }
    21     }
    22     if(maxlength>0)
    23     {
    24         printf("%s",longest);
    25     }
    26     return 0;
    27 }
    28 /*getline函数:将输入的字符保存到line数组中,并返回数组长度*/
    29 int getline(char line[],int limit)
    30 {
    31     int c;
    32     int i;//记录输入的字符串长度
    33     int j=0;//记录实际可以保存的字符串长度
    34     for(i=0;(c=getchar())!=EOF&&c!='
    ';i++)
    35     {
    36         if(i<(limit-2))
    37         {
    38           line[j]=c;
    39           j++;
    40         }
    41     }
    42     if(c=='
    ')
    43     {
    44         line[j]=c;
    45         ++j;
    46         ++i;
    47     }
    48     line[j]='';
    49     return i;
    50 }
    51 /*copyline函数:经最长字符串保存到to数组中*/
    52 void copyline(char to[],char from[])
    53 {
    54     int i=0;
    55     while((to[i]=from[i])!='')
    56         ++i;
    57 }

    运行结果:

    练习1.18编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行

     1 /*******删除每个输入行末尾的空格及制表符,并删除完全是空格的行****************/
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #define MAXLENGTH 100
     5 int getline(char s[],int limit);
     6 int mydelete(char s[]);
     7 int main()
     8 {
     9     int len;
    10     char s[MAXLENGTH];
    11     while((len=getline(s,MAXLENGTH))>0)
    12     {
    13         printf("未删除之前字符数(包含空格):");
    14         printf("%d
    ",len);
    15         if(mydelete(s)>0)
    16         {
    17             printf("删除之后字符数:");
    18             printf("%d",mydelete(s));
    19         }
    20     }
    21     return 0;
    22 }
    23 int getline(char s[],int limit)
    24 {
    25     int c;
    26     int i;
    27     for(i=0;i<(limit-1)&&((c=getchar())!=EOF)&&c!='
    ';i++)
    28     {
    29         s[i]=c;
    30     }
    31     if(c=='
    ')
    32     {
    33         s[i]=c;
    34         ++i;
    35     }
    36     s[i]='';
    37     return i;
    38 }
    39 int mydelete(char s[])
    40 {
    41     int i=0;
    42     while(s[i]!='
    ')
    43         ++i;
    44     --i;
    45     while(i>=0&&(s[i]==' '||s[i]=='	'))
    46         --i;
    47     if(i>=0)
    48     {
    49         ++i;
    50         s[i]='
    ';
    51         ++i;
    52         s[i]='';
    53     }
    54     return i;
    55 }

    运行结果:

  • 相关阅读:
    linux 7版本配置端口转发
    修改/etc/hosts.allow和/etc/hosts.deny允许linux服务器允许和限制访问策略
    DNS解析全过程
    zabbix监控原理和架构详谈
    数据库连接池
    Haproxy负载均衡
    Redis数据库
    Tensorflow实战第十一课(RNN Regression 回归例子 )
    OneNote2016代码高亮插件的安装与使用
    Tensorflow实战第十课(RNN MNIST分类)
  • 原文地址:https://www.cnblogs.com/xiaojingang/p/3698289.html
Copyright © 2011-2022 走看看