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

 #include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 100//文本的最大长度
int getline(char line[],int limit);
void copyline(char to[],char from[]);
int main()
{
int length;//当前行的长度
int maxlength=;//最大行的长度
char line[MAXLENGTH];//保存当前行的字符串
char longest[MAXLENGTH];//保存最大行的字符串
while((length=getline(line,MAXLENGTH))>)
{
if(length>maxlength)
{
maxlength=length;
copyline(longest,line);
}
}
if(maxlength>)
{
printf("%s",longest);
}
return ;
}
/*getline函数:将输入的字符保存到line数组中,并返回数组长度*/
int getline(char line[],int limit)
{
int c;
int i;
for(i=;i<(limit-)&&(c=getchar())!=EOF&&c!='\n';i++)
{
line[i]=c;
}
if(c=='\n')
{
line[i]=c;
++i;
}
line[i]='\0';
return i;
}
/*copyline函数:经最长字符串保存到to数组中*/
void copyline(char to[],char from[])
{
int i=;
while((to[i]=from[i])!='\0')
++i;
}

运行结果:

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

 #include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 15//文本的最大长度
int getline(char line[],int limit);
void copyline(char to[],char from[]);
int main()
{
int length;//当前行的长度
int maxlength=;//最大行的长度
char line[MAXLENGTH];//保存当前行的字符串
char longest[MAXLENGTH];//保存最大行的字符串
printf("The maxlength of string is 15.\n");
while((length=getline(line,MAXLENGTH))>)
{
printf("%2d:%s",length,line);
if(length>maxlength)
{
maxlength=length;
copyline(longest,line);
}
}
if(maxlength>)
{
printf("%s",longest);
}
return ;
}
/*getline函数:将输入的字符保存到line数组中,并返回数组长度*/
int getline(char line[],int limit)
{
int c;
int i;//记录输入的字符串长度
int j=;//记录实际可以保存的字符串长度
for(i=;(c=getchar())!=EOF&&c!='\n';i++)
{
if(i<(limit-))
{
line[j]=c;
j++;
}
}
if(c=='\n')
{
line[j]=c;
++j;
++i;
}
line[j]='\0';
return i;
}
/*copyline函数:经最长字符串保存到to数组中*/
void copyline(char to[],char from[])
{
int i=;
while((to[i]=from[i])!='\0')
++i;
}

运行结果:

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

 /*******删除每个输入行末尾的空格及制表符,并删除完全是空格的行****************/
#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 100
int getline(char s[],int limit);
int mydelete(char s[]);
int main()
{
int len;
char s[MAXLENGTH];
while((len=getline(s,MAXLENGTH))>)
{
printf("未删除之前字符数(包含空格):");
printf("%d\n",len);
if(mydelete(s)>)
{
printf("删除之后字符数:");
printf("%d",mydelete(s));
}
}
return ;
}
int getline(char s[],int limit)
{
int c;
int i;
for(i=;i<(limit-)&&((c=getchar())!=EOF)&&c!='\n';i++)
{
s[i]=c;
}
if(c=='\n')
{
s[i]=c;
++i;
}
s[i]='\0';
return i;
}
int mydelete(char s[])
{
int i=;
while(s[i]!='\n')
++i;
--i;
while(i>=&&(s[i]==' '||s[i]=='\t'))
--i;
if(i>=)
{
++i;
s[i]='\n';
++i;
s[i]='\0';
}
return i;
}

运行结果:

c程序设计语言第一章3的更多相关文章

  1. c程序设计语言第一章1

    1,c程序都是由函数和变量组成的. 练习1.6验证布尔表达式getchar()!= EOF的取值是0还是1 答: #include <stdio.h> #include <stdli ...

  2. c程序设计语言第一章5

    练习1.20请编写程序d e t a b

  3. c程序设计语言第一章4

    (昨天网络出现了问题,导致这篇没来得及上传,再次补上,今晚照常上传笔记) 练习1.19编写函数r e v e r s e ( s )将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个 ...

  4. c程序设计语言第一章2

    练习1.13编写一个程序,打印输入中单词长度的直方图.水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些 #include <stdio.h> #include <stdlib ...

  5. C语言——第一章,程序设计和C语言

    第一章,程序设计和C语言 一,程序和程序语言 程序:完成某项事物所预设的活动方式和活动过程 程序设计:人们描述(指程序)计算机要做的工作 程序设计语言及发展 1,机器语言    2,汇编语言    3 ...

  6. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  7. c语言第一章第一节 认识变量

    声明:本人大一新生,闲着无聊..写写c语言教程..菜鸟一枚..大神勿喷!!! 接下来我们都用dev来进行编译..vc++太古老了,没提示功能,不好上手,并且老是出毛病..vs太大了,编个c不至于,运行 ...

  8. 《JavaScript高级程序设计》——第一章JavaScript简介

    第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...

  9. C#语言————第一章 第一个C#程序

    第一章    第一个C#程序 ******************C#程序***************     ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...

随机推荐

  1. Lex与Yacc学习(二)之第一个Lex程序

    用lex识别单词 构建一个识别不同类型英语单词的简单程序.先识别词性(名词,动词等),然后再扩展到处理符合简单英语语法的多个单词的句子. 先列出要识别的一组动词: is    am   are   w ...

  2. ubuntu 执行apt-get update报错Failed to fetch

    在ubuntu下执行sudo apt-get update时,经常会遇到报错: Err http://security.ubuntu.com precise-security InRelease Er ...

  3. spring cloud 学习资源

    1.https://blog.csdn.net/column/details/17737.html 2.https://blog.csdn.net/column/details/15197.html? ...

  4. Python开发:模块

    在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...

  5. linux 安装SNV服务

    1.安装vnc server[root@pxe ~]# yum install tigervnc-server -y 2.设置 vnc server 开机启动[root@pxe ~]# chkconf ...

  6. 【18】什么是FOUC?如何避免

    [18]什么是FOUC?如何避免 Flash Of Unstyled Content: 用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁. 解决方法: ...

  7. 【LeetCode】Combination Sum(组合总和)

    这道题是LeetCode里的第39道题. 题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组 ...

  8. 九度oj 题目1467:二叉排序树

    题目描述: 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值:        2. 若右子树 ...

  9. jquery滚动条插件slimScroll

    参数 width: 'auto', //可滚动区域宽度         height: '100%', //可滚动区域高度         size: '10px', //组件宽度         c ...

  10. K-lord #3 (组合数学)

    题目描述 如图,设一个圆分成 n 个扇形 S1 ... ,Sn (扇形大小不一样),现用 k 种不同的颜色对这 n 个扇形进行染色 ( n>=3 , k>=3 ); 每一个扇形染一种颜色, ...