c程序设计语言第一章3
字符数组是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的更多相关文章
- c程序设计语言第一章1
1,c程序都是由函数和变量组成的. 练习1.6验证布尔表达式getchar()!= EOF的取值是0还是1 答: #include <stdio.h> #include <stdli ...
- c程序设计语言第一章5
练习1.20请编写程序d e t a b
- c程序设计语言第一章4
(昨天网络出现了问题,导致这篇没来得及上传,再次补上,今晚照常上传笔记) 练习1.19编写函数r e v e r s e ( s )将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个 ...
- c程序设计语言第一章2
练习1.13编写一个程序,打印输入中单词长度的直方图.水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些 #include <stdio.h> #include <stdlib ...
- C语言——第一章,程序设计和C语言
第一章,程序设计和C语言 一,程序和程序语言 程序:完成某项事物所预设的活动方式和活动过程 程序设计:人们描述(指程序)计算机要做的工作 程序设计语言及发展 1,机器语言 2,汇编语言 3 ...
- Intel汇编语言程序设计学习-第一章 基本概念
第一章基本概念 1.1 简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...
- c语言第一章第一节 认识变量
声明:本人大一新生,闲着无聊..写写c语言教程..菜鸟一枚..大神勿喷!!! 接下来我们都用dev来进行编译..vc++太古老了,没提示功能,不好上手,并且老是出毛病..vs太大了,编个c不至于,运行 ...
- 《JavaScript高级程序设计》——第一章JavaScript简介
第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...
- C#语言————第一章 第一个C#程序
第一章 第一个C#程序 ******************C#程序*************** ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...
随机推荐
- cocos2d心得关于精灵帧缓存
在cocos2d中,精灵帧缓存CCSpriteFrameCache是用来存储精灵帧的.它没有特别的属性,只存储了一些用来管理CCSpriteFrame的方法. 以一个例子来说明,一般在又纹理图集的程序 ...
- oracle 安装 启动listener 建库相关
安装 参考 http://www.cnblogs.com/gaojun/archive/2012/11/22/2783257.html 几个问题: 1. 用户删除问题 p001:~ # userdel ...
- selenium 切换窗口的几种方法
第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 d ...
- zoj2112 主席树动态第k大 ( 参考资料链接)
参考链接: http://blog.csdn.net/acm_cxlove/article/details/8565309 http://www.cnblogs.com/Rlemon/archive/ ...
- PTA 08-图9 关键活动 (30分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/719 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它 ...
- python 向MySQL里插入中文数据
用python向MySQL中插入中文数据出错,原代码片段: 1 db = MySQLdb.connect("localhost","root","12 ...
- 刷题总结——射箭(bzoj2732)
题目: Description 沫沫最近在玩一个二维的射箭游戏,如下图 1 所示,这个游戏中的 x 轴在地面,第一象限中有一些竖直线段作为靶子,任意两个靶子都没有公共部分,也不会接触坐标轴.沫沫控制一 ...
- OsCache MemCached EhCache
Memcache:分布式内存对象缓存系统,占用其他机子的内存.很多互联网,负载均衡三台(以三台为例)web服务器可以共享一台Memcache的资源.传递的信息以键值对的形式存储.传递的数据要实现序列化 ...
- angular父子scope之间的访问
1.子可以访问父的scope,也可以更新相同的scope,但父scope不会被刷新 2.父要访问子scope的方法
- centos 7如何配置网络、网卡、ip命令
Linux网络相关配置文件 Linux网络配置相关的文件根据不同的发行版目录名称有所不同,但大同小异,主要有似下目录或文件. (1)/etc/hostname:主要功能在于修改主机名称. (2)/et ...