字符数组是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. 降维算法-PCA主成分分析

    1.PCA算法介绍主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理.一般我们获取的原始数据维度都很高,比如1000个特征,在这1 ...

  2. SpringMVC之HandlerAdapter执行流程

    01.protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Except ...

  3. 算法学习记录-排序——选择排序(Simple Selection Sort)

    之前在冒泡排序的附录中提到可以在每次循环时候,不用交换操作,而只需要记录最小值下标,每次循环后交换哨兵与最小值下标的书, 这样可以减少交换操作的时间. 这种方法针对冒泡排序中需要频繁交换数组数字而改进 ...

  4. android-csv-variants

    android-csv-variants https://github.com/zawn/android-csv-variants/ 目的 用于在Android Gradle构建时通过CSV文件配置V ...

  5. IOS 自动布局-UIStackPanel和UIGridPanel(二)

    在上一篇中我提到了如何使用stackpanel和gridpanel来实现自动布局.而在这一篇中我着重讲解下其中的原理. 在(UIPanel   UIStackPanel  UIGridPanel)中主 ...

  6. 【编程工具】Sublime Text3的安装和常用插件推荐

    本人刚刚学习 HTML,曾经上网找过一些编写 HTML 的软件,但感觉都不太好,经过三挑四选下,最终我决定选择 Sublime Text3 这款软件来作为学习工具,上网找到了许多实用的插件,在这里给大 ...

  7. SQL注入与xss

    1. 什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过递交参数构造巧妙的SQL语句,从而成功获取 ...

  8. SPOJ - DQUERY 主席树求区间有多少个不同的数(模板)

    D-query Time Limit: 227MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Submit Status ...

  9. Android隐藏软键盘收回软键盘

    代码改变世界 Android隐藏软键盘收回软键盘 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPU ...

  10. BZOJ 3939 [Usaco2015 Feb]Cow Hopscotch ——线段树 CDQ分治

    显然dp[i][j]=ps[i-1][j-1]-sigma(dp[k<i][l<j],a[i][j]=a[k][l]) 考虑对于每一种颜色都开一颗区间线段树,但是空间不够. 所以我们可以动 ...