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的更多相关文章

  1. Getting started with the basics of programming exercises_5

    1.编写函数,把由十六进制数字组成的字符串转换为对应的整型值 编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值.字符串中允许包含的数字包括:0~9 ...

  2. Getting started with the basics of programming exercises_4

    1.编写一个删除C语言程序中所有的注释语句的程序.要正确处理带引号的字符串与字符串常量,C语言中程序注释不允许嵌套. #include<stdio.h> void rcomment(int ...

  3. 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) ...

  4. Getting started with the basics of programming exercises_1

    1.编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替 使用if 结构: #include<stdio.h> #define NONBLANK 'a'; // repal ...

  5. Beginning C# Programming with Unity

    Welcome to the wonderful world of programming! In this book you’ll learn the basics of programming u ...

  6. C语言学习书籍推荐《Practical C++ Programming》下载

    下载链接 :点我 C++ is a powerful, highly flexible, and adaptable programming language that allows software ...

  7. 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? ...

  8. LINQ Query Expressions

    https://msdn.microsoft.com/en-us/library/bb397676(v=vs.100).aspx Language-Integrated Query (LINQ) is ...

  9. 【译】微软的Python入门教程(一)

    Getting started with Python(Python入门) Overview 概述 The series of videos on Channel 9 is designed to h ...

随机推荐

  1. Robbin负载均衡

    Robbin是在Spring Cloud中的一个组件,是由Netfix发布的负载均衡器,有助于控制HTTP和TCP客户端的行为.它给我们提供了默认的轮询.随机等负载均衡算法.同时也可以由我们定义自己的 ...

  2. jquery Select2 学习笔记之中文提示 - CSDN博客

    首先学习这个东西呢,还是看官网比较全面 select2官网例子 要select2中文显示:必须要引入中文包,且一定要放在select2.js之后 [javascript] view plain cop ...

  3. chmod 777 修改权限之后,文件夹颜色变绿:解决方案

    修改前: 方法一: ls --color=none #不显示颜色 方法一修改后: 方法二:修改配色 ①安装git +++可用在windows下载之后用ftp传上去:http://pan.baidu.c ...

  4. QT生成GUID

    #include <QCoreApplication> #include <QUuid> #include <QDebug> int main(int argc, ...

  5. 访问Bing地图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. ASP.NET自定义控件组件开发 第一章 第一章:从一个简单的控件谈起

    第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第三 ...

  7. 在notepad++中tab和空格的区别

    在notepad++中实现tab和空格不通用的问题 方式一: 方式二:

  8. python变量、变量属性

    1.简述执行Python程序的两种方式以及他们的优缺点 答:交互型优点:马上就能看到结果,排错方便.交互型缺点:代码无法保存,断电即消失 命令型优点:代码永久保存.命令型缺点:不易排错 2.简述Pyt ...

  9. python 布尔值索引

  10. golang的包规则

    1.包声明:文件所在目录,有利于源码整体迁移. 2.包导入:4种方式. ---------------------------------------------------------------- ...