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#-->控制台程 ...
随机推荐
- 牛客网暑期ACM多校训练营(第一场)J Different Integers(树状数组, 离线)
题意: 给定n个数字, 然后给出m个区间, 求区间外其他数字的种类有多少. 分析: 将区间以r为基准升序排序, 每次处理pre~r的数字第一次出现的位置. #include<bits/stdc+ ...
- spring配置datasource三种方式 数据库连接池
尊重原创(原文链接):http://blog.csdn.net/kunkun378263/article/details/8506355 1.使用org.springframework.jdbc.da ...
- mysql数据库修改字段类型
修改字段类型: alter table 表名 modify column 字段名字 decimal(18, 4) ;
- jsessionid 所引起的404问题和解决方法
问题: 在SpringMvc使用RedirectView或者"redirect:"前缀来做重定向时,Spring MVC最后会调用: response.sendRedirect(r ...
- BZOJ 3669 [Noi2014]魔法森林 ——SPFA / Link-Cut Tree
[题目分析] 大意就是有一张图,边权有两个值,ai和bi 找到一条路径,使得路径上的max(ai)+max(bi)最小. 遇到有两个权值或者多个权值的时候,如果他们互相影响,试着用分块搞一搞. 如果互 ...
- 【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge
acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线 ...
- cf682E Alyona and Triangles
You are given n points with integer coordinates on the plane. Points are given in a way such that th ...
- 标准C程序设计七---03
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 转载 cc、gcc、g++、CC的区别概括
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
- jQuery on() 和 live
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...