要求:处理一个字符串,删除字符串中多余的空格、水平制表符和空行,并满足下列要求:

(1)对原字符串只能进行一次扫描。
(2)不允许申请新的空间。
(3)处理后的字符串的首尾不能有空格、制表符和空行。
(4)如果原字符串中连续出现空格和水平制表符,则处理后的字符串只需存储一个空格。
(5)如果原字符串中连续出现空格、水平制表符和空行,则处理后的字符串只需存储一个空行。

C语言实现代码如下(该代码经过garbageMan提醒后进行了更改):

 //state 0: 初始状态
//state 1: 前一个字符是'\n'(非初始状态)
//state 2: 前一个字符是空格(非初始状态)
//state 3: 前一个字符既不是空格也不是'\n'
void remove_extra_space(char *str)
{
int state = ; //当前状态
int i = ; //读入位置
int j = ; //输出位置 for(; str[i] != ; ++i)
{
if(str[i] == ' ' || str[i] == '\t')
{
if(state == || state == || state == )
continue;
else if(state == )
{
str[j++] = ' ' ;
state = ;
}
}
else if(str[i] == '\n')
{
if(state == || state == )
continue;
else if(state == )
{
str[j - ] = '\n';
state = ;
}
else if(state == )
{
str[j++] = '\n';
state = ;
}
}
else
{
str[j++] = str[i];
state = ;
}
}
if(state == || state == )
--j;
str[j] = ;
}

参照garbageMan的思路和playerc的代码更改为使用指针的版本(推荐):

 void remove_extra_space(char *str)
{
char *sp = str;
char *prev = ; while(*str && (*str == ' ' || *str == '\n' || *str =='\t'))
++str; for(; *str; ++str)
{
switch (*str)
{
case '\t': *str = ' ';
case ' ' :
if (*prev == '\n' || *prev ==' ')
continue;
break; case '\n':
if (*prev == '\n')
continue;
else if (*prev == ' ')
{
*prev = '\n';
continue;
}
break;
} prev = sp;
*sp++ = *str;
} if(prev && *prev && (*prev == ' ' || *prev == '\n'))
--sp;
*sp = ;
}

参考playerc所写代码:http://www.cnblogs.com/playerc/p/3217355.html

最后,对所有提供宝贵意见的朋友表示感谢!

删除字符串中多余的空白字符和空行(C语言实现)的更多相关文章

  1. 如何删除word中多余的空格和空行

    去除word中多余的空格及空行 一.去掉表格和格式 为了版面的整齐,网页文档都是以表格的形式存在的,只是一般情况下表格的颜色被设为无色或表格宽度被设为0,所以我们在网页上看不到表格.另外,网 页文档中 ...

  2. C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,

    //将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...

  3. C# 删除字符串中的中文

    /// <summary> /// 删除字符串中的中文 /// </summary> public static string Delete中文(string str) { s ...

  4. PAT 字符串-02 删除字符串中的子串

    /* 2 *PAT 字符串-02 删除字符串中的子串 3 *2015-08-09 4 作者:flx413 5 */ #include<stdio.h> #include<string ...

  5. JS中删除字符串中的空格

    问题描述:         在进行字符串操作时,由于字符串中存在较多的空格,因此需要考虑取消字符串中的空格 问题解决:       (1)删除字符串中的前导空格(字符串的前面的空格): 注意:这里使用 ...

  6. jst通用删除数组中重复的值和删除字符串中重复的字符

    以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...

  7. 算法基础:删除字符串中出现次数最少的字符(Golang实现)

    描写叙述: 实现删除字符串中出现次数最少的字符.若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串. 字符串中其他字符保持原来的顺序. 输入: 字符串仅仅包括小写英文字母, 不考虑非法输入, ...

  8. Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符

    ylbtech-Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符 1.返回顶部 1. Java 实例 - 删除字符串中的一个字符  Java 实例 以 ...

  9. Python:删除字符串中的字符

    一.删除字符串两端的一种或多种字符 #strip().lstrip().rstrip()方法:(默认删除空格符) A.list.strip(字符):删除字符串两端的一种或多种字符: #例:删除字符串s ...

随机推荐

  1. struts2.3.15.3中动态方法调用默认是关闭的

    初学ssh,用的struts2.3.15.3,使用了如下表单: <form action="/spring3/index/login.action" method=" ...

  2. Oracle Dataguard三种保护模式概述(转)

    Oracle的DataGuard技术有三种实现模式,分别是max performance.max availability.max protection这三种模式. 以下是来自Oracle文档的摘要信 ...

  3. 蜗牛爱课 - iOS7、8模态半透明弹出框

    //源Controller中跳转方法实现 MKDialogController *controller = [[MKDialogController alloc] init]; controller. ...

  4. FileUpload控件

    FileUpload控件 属性:FileName: 获取上传的文件名 HasFile: 是否选择(存在)上传的文件 ContentLength: 获得上窜文件的大小,单位是字节(byte) 方法:Se ...

  5. perl install module && normal module

    Windows: perl -MCPAN -e shell install  XML::GDOME   Archive::Zip 后面继续更新... Archive usage: $obj = Arc ...

  6. js中typeof与instanceof的不同用法

    typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,function(函数),object(NULL,数组,对象),und ...

  7. Python简明教程---学习笔记

    字符双引号括起,数字不括: 分隔符为逗号(,),不能为空格 变量定义时即赋值 采用utf-8编码:#-*-coding:utf-8-*-或者#coding:utf-8 字符串定义:单/双引号括起 %符 ...

  8. In Depth : Android Boot Sequence / Process

    In Depth : Android Boot Sequence / Process What happened when I press power on button in my Android ...

  9. Java值创建线程的两种方式对比

    在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口.那么这两种方式孰优孰劣呢? 采用继承Thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需 ...

  10. Epipe

    http://www.cnblogs.com/carekee/articles/2904603.html http://blog.chinaunix.net/uid-10716167-id-30805 ...