Getting started with the basics of programming exercises_3
1、编写一个程序删除每个输入行末尾的空格及制表符并删除完全是空白符的行
#include<stdio.h>
#define MAXLINE 1000 // maximum input line size
int getline(char line[], int maxline);
int delete(char s[]);
// remove trailing blanks and tabs, and delete blank lines
int main(void)
{
char line[MAXLINE]; // current input line while(getline(line, MAXLINE) > 0)
if(delete(line) > 0)
printf("%s", line); return 0;
} // getline: read a line into s, return length
int getline(char s[], int lim)
{
int c, i, j; // i记录字符串的长度,j记录被复制到字符串中的字符的个数 j = 0;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
if(i < lim-2)
{
s[j] = c; // line still in boundaries
++j;
}
if(c == '\n')
{
s[j] = c;
++j;
++i;
}
s[j] = '\0';
return i;
}
// remove trailing blanks and tabs from character string s
int delete(char s[])
{
int i; i = 0;
while(s[i] != '\n') // find newline character
++i;
--i; // back off from '\n'
while(i > 0 && (s[i] == ' ' || s[i] == '\t'))
--i;
if(i >= 0) // is it a nonblank line?
{
++i;
s[i] = '\n'; // put newline character back
++i;
s[i] = '\0'; // terminate the string
}
return i;
}
2、编写一个翻转字符串顺序的函数,使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序
#include<stdio.h>
#define MAXLINE 1000 // maximum input line size
int getline(char line[], int maxline);
void reverse(char s[]);
// reverse input lines, a line at a time
int main(void)
{
char line[MAXLINE]; // current input line while(getline(line, MAXLINE) > 0)
{
reverse(line);
printf("%s", line);
}
return 0;
}
// getline: read a line into s, return length
int getline(char s[], int lim)
{
int c, i, j; // i记录字符串长度,j记录被复制到字符串s中的字符的个数 j = 0;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
{
if(i < lim-2)
{
s[j] = c; // line still in boundaries
++j;
}
}
if(c == '\n')
{
s[j] = c;
++j;
++i;
}
s[j] = '\0';
return i;
}
// reverse: reverse string s
void reverse(char s[])
{
int i, j;
char temp; i = 0;
while(s[i] != '\0') // find the end of string s
++i;
--i; // back off from '\0'
if(s[i] == '\n')
--i; // leave newline in place
j = 0;
while(j < i) // beginning of new strings
{
temp = s[j];
s[j] = s[i]; // swap the characters
s[i] = temp;
--i;
++j;
}
}
3、编写程序,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方,假设制表符终止的位置是固定的,比如每隔n 列就会出现一个制表符终止位,n 应作为变量还是符号常量呢?
#include<stdio.h>
#define TABINC 8 // tab increment size
// replace tabs with the proper number of blanks
int main(void)
{
int c, nb, pos; nb = 0; // number of blanks necessary
pos = 1; // position of character in line
while((c = getchar()) != EOF)
{
if(c == '\t') // tab character
{
nb = TABINC - (pos-1) % TABINC;
while(nb > 0)
{
putchar(' ');
++pos;
--nb;
}
}
else if(c == '\n') // newline character
{
putchar(c);
pos = 1;
}
else
{
putchar(c); // all other characters
++pos;
}
} return 0;
}
Getting started with the basics of programming exercises_3的更多相关文章
- Getting started with the basics of programming exercises_5
1.编写函数,把由十六进制数字组成的字符串转换为对应的整型值 编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值.字符串中允许包含的数字包括:0~9 ...
- Getting started with the basics of programming exercises_4
1.编写一个删除C语言程序中所有的注释语句的程序.要正确处理带引号的字符串与字符串常量,C语言中程序注释不允许嵌套. #include<stdio.h> void rcomment(int ...
- Getting started with the basics of programming exercises_2
1.编写简单power函数 #include<stdio.h> int power(int m, int n); // test power function int main(void) ...
- Getting started with the basics of programming exercises_1
1.编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替 使用if 结构: #include<stdio.h> #define NONBLANK 'a'; // repal ...
- Beginning C# Programming with Unity
Welcome to the wonderful world of programming! In this book you’ll learn the basics of programming u ...
- C语言学习书籍推荐《Practical C++ Programming》下载
下载链接 :点我 C++ is a powerful, highly flexible, and adaptable programming language that allows software ...
- How do I learn machine learning?
https://www.quora.com/How-do-I-learn-machine-learning-1?redirected_qid=6578644 How Can I Learn X? ...
- LINQ Query Expressions
https://msdn.microsoft.com/en-us/library/bb397676(v=vs.100).aspx Language-Integrated Query (LINQ) is ...
- 【译】微软的Python入门教程(一)
Getting started with Python(Python入门) Overview 概述 The series of videos on Channel 9 is designed to h ...
随机推荐
- SpringCloud微服务实战一:Spring Cloud Eureka 服务发现与注册中心(高可用实列为两个注册中心)
微服务架构: 微服务架构的核心思想是,一个应用是由多个小的.相互独立的.微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖.不同服务通过一些轻量级交互机制来通信,例如 RPC.HTTP 等, ...
- IO流6 --- FileReader中使用read(char[] cbuf)读入数据 --- 技术搬运工(尚硅谷)
FileReader 字符输入流 @Test public void test2(){ File file = new File("hello.txt"); FileReader ...
- 关于python的字典操作
字典和列表的区别: 列表是有序的 字典是无序的 字典使用{}定义 字典使用键值对存储数据,键值对之间使用 “ ,”分隔 键 key 是索引 值 value 是数据 键和值之间使用 “ :”分隔 ...
- python应用文件读取写登录注册
#!/usr/bin/python3# -*- coding: utf-8 -*-# Author: zhw#读取文件中的内容def open_file(filename ,file_type , * ...
- Zookeeper 扫盲
Zookeeper 扫盲 :disappointed_relieved: 配置文件详解: tickTime:基本事件单元,以毫秒为单位,这个时间作为 Zookeeper 服务器之间或客户端之间维持心跳 ...
- oracle -视图 序列 约束
1.视图 视图是基于一个或者多个表数据库对象,视图允许用户创建一个无数据的”伪表“,视图只是一个获取特定列好行的sql查询组成,通过视图检索数据就像从表中检索数据 一样. 视图可以提供一个附加的安全层 ...
- CSS(中)篇
1.1行高 行高属于文字的属性 行高=文字大小+上间距+下间距(默认行高=18px) 行高的作用: 设置文字垂直方向中有距离 文字垂直居中(行高=容器的高度) 影响行高的因素: 文字大小可以改变行高 ...
- KiCad 元件值 F4NNIU 规范(2019-10-10)
目录 KiCad 元件值 F4NNIU 规范 电阻 电容 电感 二极管 三极管 MOSFET IC 文件历史 KiCad 元件值 F4NNIU 规范 为方便物料统计以及规范物料,在制造 BOM 时可以 ...
- HttpClient 该知道一些概念
HttpClient 该知道不该知道的一些事 一.简介: Apache开源项目: http://hc.apache.org/ 基于HTTP协议提供强大的支持,构建HTTP客户端应用程序 执行HTTP协 ...
- qt,pro文件中用于平台区分的写法
qt,pro文件中用于平台区分的写法 切记: 大括号和平台需要在同一行中,否则会失效 unix { TARGET = appname } macx { TARGET = appname2 } win3 ...