c语言 去电txt空白行,删除字符串中多余的空白字符和空行(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 = ;

}

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

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

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

C# 删除字符串中的中文

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

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

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

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

随机推荐

MySQL备份锁

无论逻辑备份还是物理备份,为了获取一致性位点,都强依赖于FTWRL(Flush Table With Read Lock).这个锁杀伤力非常大,因为持有锁的这段时间,整个数据库实质上不能对外提供写服务 ...

在进行javaIO写文件操作后文件内容为空的情况

writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\order.txt"))) ...

React学习笔记---项目构建

简介 ReactJs由于有FB的支持,得到了社区的极大关注,同时由于ReactJs只希望专一的做好View层次上的工作,所以本身并没有涉及很多周边工具. 今天要介绍一款工具,同时包含一个构建项目模板的 ...

windows下在yii中使用mongodb

1.编译或下载对应dll动态链接库拓展文件,下载地址:点我,不知道如何编译windows下的dll拓展->点我 2.找到web服务器软件,如apache,nginx等webserver处理浏览器 ...

黄聪:Access-Control-Allow-Origin,JS跨域解决办法

.htaccess添加下面代码: Header add Access-Control-Allow-Origin "*" ...

mac上解决Resource temporarily unavailable

Resource temporarily unavailable这种问题一般是因为当前的进程数或者文件数不够 fork: Resource temporarily unavailable 修改最大进程 ...

51nod1229 序列求和 V2

这题...毒瘤吧,可能要写两份代码... 传送门 noteskey 我们考虑这里的复杂度肯定是与 k 相关的,而且平方也是没问题的,那么我们先看看 S(k) 能怎么得到: \[\begin{align ...

为数据库重新生成log文件

1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先不 ...

UML教程

1.前言 1.1 前言   本资料对UML1.5各种模型图的构成和功能进行说明,通过本资料的学习达到可以读懂UML模型图的目的.本资料不涉及模型图作成的要点等相关知识. 1.2 UML概述 1.2.1 ...

Python学习笔记之参数解析

python提供了两种方法进行命令行的参数解析,分别是getopt和optparse类中的模块OptionParser,下面分别详细了解这两个模块: 1.getopt模块 首先复习C语言的命令行解析: ...