1. /*
  2. 本程序用来将输入的制表符替换为\t, 而将退格替换为\b,
  3. 将反斜杠替换为\\
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8.  
  9. typedef struct node
  10. {
  11. char Input;
  12. struct node* next;
  13. }NODE;
  14.  
  15. int GetLine(NODE *head);
  16. int Transfer(NODE *head);
  17. void EchoLine(NODE *head);
  18.  
  19. int main(int argc,char* argv[],char* env[])
  20. {
  21. NODE* head;
  22.  
  23. if(NULL==(head=(NODE*)malloc(sizeof(NODE))))
  24. {
  25. puts("No enough space,then will quit");
  26. exit();
  27. }
  28.  
  29. GetLine(head);
  30. Transfer(head);
  31. EchoLine(head);
  32.  
  33. getchar();
  34. return ;
  35. }
  36.  
  37. /*
  38. 函数功能:
  39. 读取字符,并用动态分配的内存存储起来
  40. 函数原型:
  41. char* GetLine(char* head)
  42. 函数参数:
  43. char* head:存储的首地址
  44. 返回值:
  45. 0:成功执行
  46. 1:没有足够的内存空间分配
  47. 异常:
  48. 传递空指针参数
  49. */
  50. int GetLine(NODE* head)
  51. {
  52. NODE* end;
  53. NODE* temp;
  54.  
  55. short int Input;
  56.  
  57. if(NULL==(head=(NODE*)malloc(sizeof(NODE))))
  58. exit();
  59.  
  60. end=head;
  61. while((Input=getchar())!= EOF)
  62. {
  63. end->Input =Input;
  64. if(NULL==(temp=(NODE *)malloc(sizeof(NODE))))
  65. exit();
  66. temp->next =NULL;
  67. end->next =temp;
  68. end=temp;
  69. }
  70.  
  71. return ;
  72. }
  73.  
  74. /*
  75. 函数功能:
  76. '\t' ——> ‘\\’##‘t’
  77. ‘\b' ——> '\\'##'b'
  78. '\\' ——> '\\'##'\\'
  79. 函数原型:
  80. int Transfer(NODE *)
  81. 函数参数:
  82. NODE* head:待处理文本流首地址
  83. 函数返回值:
  84. 0: 成功执行
  85. 1: 没有足够的空间存储分配
  86. 异常:
  87. 传递空指针参数
  88. */
  89. int Transfer(NODE* head)
  90. {
  91. NODE* temp;
  92. NODE* NewNode;
  93.  
  94. NewNode=head;
  95. while(NewNode->next != NULL)
  96. {
  97. if(NewNode->Input == '\t')
  98. {
  99. if(NULL==(temp=(NODE*)malloc(sizeof(NODE))))
  100. return ;
  101. //1、先将temp的Input成员设置成‘t’
  102. temp->Input ='t';
  103. //2、然后将temp->next指向NewNode的下一个节点
  104. temp->next =NewNode->next ;
  105. //3、然后将NewNode->next指向temp节点
  106. NewNode->next =temp;
  107. //4、设置NewNode->input为反斜杠 ‘\\’
  108. NewNode->Input ='\\';
  109. }
  110. else if(NewNode->Input == '\b')
  111. {
  112. if(NULL==(temp=(NODE*)malloc(sizeof(NODE))))
  113. return ;
  114. //1、先将temp的Input成员设置成‘t’
  115. temp->Input ='b';
  116. //2、然后将temp->next指向NewNode的下一个节点
  117. temp->next =NewNode->next ;
  118. //3、然后将NewNode->next指向temp节点
  119. NewNode->next =temp;
  120. //4、设置NewNode->input为反斜杠 ‘\\’
  121. NewNode->Input ='\\';
  122. }
  123. else if(NewNode->Input == '\\')
  124. {
  125. if(NULL==(temp=(NODE*)malloc(sizeof(NODE))))
  126. return ;
  127. //1、先将temp的Input成员设置成‘t’
  128. temp->Input ='\\';
  129. //2、然后将temp->next指向NewNode的下一个节点
  130. temp->next =NewNode->next ;
  131. //3、然后将NewNode->next指向temp节点
  132. NewNode->next =temp;
  133. //4、设置NewNode->input为反斜杠 ‘\\’
  134. NewNode->Input ='\\';
  135. }
  136. }
  137.  
  138. return ;
  139. }
  140.  
  141. /*
  142. 函数功能:
  143. 输出字符流
  144. 函数原型:
  145. int EchoLine(NODE *head)
  146. 函数参数:
  147. NODE* head:存储字符的首地址
  148. 返回值:
  149. 无返回值
  150. 异常:
  151. 传递空指针参数
  152. */
  153.  
  154. void EchoLine(NODE* head)
  155. {
  156. NODE* temp;
  157. temp=head;
  158. while(NULL != temp->next )
  159. {
  160. putchar(temp->Input);
  161. temp=temp->next ;
  162.  
  163. //free(temp);
  164. }
  165. }

【算法和数据结构】_14_小算法_Blank字符替换的更多相关文章

  1. python算法与数据结构-选择排序算法(33)

    一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...

  2. python算法与数据结构-希尔排序算法(35)

    一.希尔排序的介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每 ...

  3. python算法与数据结构-算法介绍(31)

    一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...

  4. 【数据结构】KMP算法

    我还是不太懂... 转2篇大神的解释    1>https://www.cnblogs.com/yjiyjige/p/3263858.html     2>https://blog.csd ...

  5. 数据结构和算法(Golang实现)(23)排序算法-归并排序

    归并排序 归并排序是一种分治策略的排序算法.它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列. 归并排序首先由著名的现代计算机之父John_von_ ...

  6. 算法与数据结构(十七) 基数排序(Swift 3.0版)

    前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...

  7. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

  8. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  9. Python算法与数据结构--求所有子数组的和的最大值

    Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...

随机推荐

  1. 配置react, redux, next.js环境

    1. react https://reactjs.org/docs/add-react-to-a-new-app.html npm install -g create-react-app create ...

  2. Winform关于未找到元数据文件.exe和不包含适合于入口点的静态“Main”方法

    在三层架构中ItcastCaterModel项目是被其他项目引用的,所以输出类型为类库.

  3. IDA Pro安装教程

    1.下载 http://tools.pediy.com/windows/disassemblers.htm 我们这里选择6.8版本下载 2.安装 打开下载的安装包,解压出来进入IDAPro68文件夹, ...

  4. 单点登录系统实现基于SpringBoot

    今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...

  5. 跨域iframe如何通信

    1. 使用document.domain设置相同主域(同主域不同子域): 2. 使用window.name添加空网页: 3. 使用postmessage监听:

  6. jsp九大内置对象 ,三大指令,四大作用域,七大动作

    九大内置对象: application:应用程序对象 对整个web工程都有效 request:对当前请求的封装 pageConfig:只对当前页面有效,里面封装了基本request和session的对 ...

  7. css图形——三角形

    1.css图形简介 在浏览网页的时候,我们经常看见各种图形的效果,而但凡涉及到图形效果,我们第一个想到的就是用图片来实现.但是在前端开发中,为了网站的性能速度,我们都是秉承着少用图片的原生质. 因为图 ...

  8. Java log4j

    <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging& ...

  9. 一分钟学会ConstraintLayout(转载)

    原文地址:https://www.v2ex.com/t/287863 最近更新了Android Studio,突然发现xml中的布局已经变成了ConstraintLayout,于是搜了一篇文章看一下 ...

  10. 多线程callable使用方法

    Runnable是执行工作的独立任务,但是它不返回任何值.在JavaSE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表的是从方法call()中返回的值,并且必须使用Executor ...