字符数组是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. 剑指Offer(书):树的子结构

    题目:输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 分析:关于二叉树大部分适应于递归结构. public boolean HasSubtree(TreeN ...

  2. UVa 11987 并查集 Almost Union-Find

    原文戳这 与以往的并查集不同,这次需要一个删除操作.如果是叶子节点还好,直接修改父亲指针就好. 但是如果要是移动根节点,指向它的所有子节点也会跟着变化. 所以要增加一个永远不会被修改的虚拟根节点,这样 ...

  3. java 获取音频文件时长

    需要导入jar包:jave 1.0.2 jar 如果是maven项目,在pom.xml文件中添加: <dependency> <groupId>it.sauronsoftwar ...

  4. vue 的 scroller 使用

    一 安装 使用npm 安装npm install vue-scroller -d 二 引入 import VueScroller from "vue-scroller" Vue.u ...

  5. 【11】specified value,computed value,used value计算方法

    [11]specified value,computed value,used value计算方法 specified value(规范值): 计算方法如下: 如果样式表设置了一个值,使用这个值 如果 ...

  6. dp的两个不错的题

    C - Cheapest Palindrome Keeping track of all the cows can be a tricky task so Farmer John has instal ...

  7. 2017 ACM/ICPC Asia Regional Shenyang Online

    cable cable cable Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. ubuntu添加开机启动

    vim /etc/init.d/mytest #!/bin/sh echo "$(pwd) and $USER and $(whoami)" >> /root/temp ...

  9. js的undefined怎么判断

    window.undefined=window.undefined 如何理解呢?百度搜索:window.undefined=window.undefined 博客说是为了兼容老浏览器. 技巧: 调试时 ...

  10. iOS学习笔记06-手势识别

    一.UIGestureRecognizer简单介绍 我们已经学习了触摸事件处理,但触摸事件处理起来很麻烦,每个触摸事件处理都需要实现3个touches方法,比较繁琐,实际上我们可以使用更加简单的触摸事 ...