删除字符串中多余的空白字符和空行(C语言实现)
要求:处理一个字符串,删除字符串中多余的空格、水平制表符和空行,并满足下列要求:
(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语言实现)的更多相关文章
- 如何删除word中多余的空格和空行
去除word中多余的空格及空行 一.去掉表格和格式 为了版面的整齐,网页文档都是以表格的形式存在的,只是一般情况下表格的颜色被设为无色或表格宽度被设为0,所以我们在网页上看不到表格.另外,网 页文档中 ...
- C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,
//将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...
- C# 删除字符串中的中文
/// <summary> /// 删除字符串中的中文 /// </summary> public static string Delete中文(string str) { s ...
- PAT 字符串-02 删除字符串中的子串
/* 2 *PAT 字符串-02 删除字符串中的子串 3 *2015-08-09 4 作者:flx413 5 */ #include<stdio.h> #include<string ...
- JS中删除字符串中的空格
问题描述: 在进行字符串操作时,由于字符串中存在较多的空格,因此需要考虑取消字符串中的空格 问题解决: (1)删除字符串中的前导空格(字符串的前面的空格): 注意:这里使用 ...
- jst通用删除数组中重复的值和删除字符串中重复的字符
以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...
- 算法基础:删除字符串中出现次数最少的字符(Golang实现)
描写叙述: 实现删除字符串中出现次数最少的字符.若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串. 字符串中其他字符保持原来的顺序. 输入: 字符串仅仅包括小写英文字母, 不考虑非法输入, ...
- Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符
ylbtech-Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符 1.返回顶部 1. Java 实例 - 删除字符串中的一个字符 Java 实例 以 ...
- Python:删除字符串中的字符
一.删除字符串两端的一种或多种字符 #strip().lstrip().rstrip()方法:(默认删除空格符) A.list.strip(字符):删除字符串两端的一种或多种字符: #例:删除字符串s ...
随机推荐
- xcode中控件共有属性
Text,title 控件上的文字 backgroung 背景图片或颜色 alignment 布局(居中,..) mode显示模式(缩放,拉伸..) drawing 隐藏控件的可见性 alpha 透明 ...
- Mongodb集群搭建
搭建高可用Mongodb集群 http://www.lanceyan.com/category/tech/mongodb/page/2 再看MongoDB副本集 http://blog.itpub. ...
- 内存泄漏工具VLD1.0_要点分析
0X01 关闭FPO优化 // Frame pointer omission (FPO) optimization should be turned off for this // entire fi ...
- php的SQL连接操作的方法
初学php,于是一开始就在sql(具体点说是mysql)里受挫严重.于是这里记下一些方法. 首先是基本方法.基本方法现在我不用了,所以我就附一下hustoj中的部分吧 基本方法的数据库连接操作: if ...
- Spring2.0集成Quartz1.5.2调度框架
Quartz是个开放源码项目,提供了丰富的作业调度集.希望您在阅读完本文并看过代码演示后,可以把Quartz的基本特性应用到任何Java™应用程序中.现代的Web应用程序框架在范围和复杂性方面都有所发 ...
- Python之路第五天,基础(5)-序列化和字符串格式化
序列化 Python中用于序列化的两个模块 json 用于『字符串』和『python基本数据类型』间进行转换 pickle 用于『python特有的类型』和『python基本数据类型』间进行转换 js ...
- PBM文件格式
PBM是一种单色位图文件,常用于打印机,由于需要下面对PBM文件格式进行分析. 每个文件的开头两个字节(ASCII码)作为文件描述子,可以理解为文件头.具体如下: 头 类型 编码 P1 位图 ASCI ...
- Linux查看网卡状态
观看网卡传送.接收数据包的状态 $ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK ...
- JSTL标签急速秒杀jsp页面中的java代码(一)---Core标签库
JSTL标签简介 ===================================================================== JSTL的全称是JavaServer Pa ...
- C#编程建言笔记
方法: 1.方法(静态或实例)JIT编译后,在内存中的代码段上都是一个全局函数,且只存在一份拷贝. 2.方法修饰符:保护级别,静态,虚函数:方法签名:返回值,函数名,参数. 构造器: 1.一个方法只能 ...