使用C语言去除字符串中空格的简单示例

 2024-01-23 05:00:24  阅读 0

在网上看了一些去除空格的代码,但觉得不是很简洁,于是本着高效、不使用额外存储空间的思想,自己写了代码来实现。 该功能去除空格的实现方式有以下三种:

1.去掉所有空格;

2.一是去掉剩余的空间;

3. 删除右侧的空格。 如果要去掉左右两边的空格,只需先去掉左边,再去掉右边即可。

下面是实现代码:

/*去掉字符串中的所有空格*/

(char*pStr) { char *pTmp = pStr;while (*pStr != '/0') { if (*pStr != ' ') { *pTmp++ = *pStr; } } ++pStr; } *pTmp = '/0'; }/*去除字符串右侧的空格*/ void (char *pStr) { char *pTmp = pStr+(pStr)-1;while (*pTmp == ' ') { *pTmp = '/0'; } pTmp--; } }/*去除字符串左侧的空格*/ void (char *pStr) { char *pTmp = pStr;while (*pTmp == ' ') { pTmp++; } while(*pTmp != '/0 ') { *pStr = *pTmp; pStr++; pTmp++; } *pStr = '/0'; }

上面C语言去除字符串空格的简单例子就是小编分享的全部内容。 希望能给大家一个参考,也希望大家支持词典教程网站。

以下四种情况,为了程序编译成功,必须使用成员初始化列表(list):

1、初始化一个引用成员();

2、初始化常量对象(const);

3、调用基类的构造函数,基类的构造函数有一组参数;

4、调用成员类(class)的构造函数,构造函数有一组参数

这四种情况,程序都能正常编译,但效率有所欠缺(下面会详细讨论)。

class Word{ _name;int _cnt;:Word() {_name = 0;_cnt = 0;}};

上面程序的实现机制是:Word类的构造函数首先会生成该类的临时对象(注意_name是该类的对象),然后初始化该临时对象。

然后通过赋值运算符将临时对象赋给_name,最后销毁临时对象。

以下是构造函数的内部展开结果,c++伪代码:

字::字(){_name.::(); //调用类的默认构造函数 ( ) temp = (0); //生成类的临时对象并初始化_name.:: = (temp); //通过赋值运算符将临时对象的值(深层次)复制到.::~()中; //析构函数名为_cnt = 0;}

上面的代码效率不是很高,因为它需要调用默认的构造函数和析构函数来生成和销毁临时对象。 下面是一个更高效的实现方法:

Word::Word : _name (0) //_name直接调用类的构造函数赋值 {_cnt = 0;}

它将被构造函数扩展为以下形式(c++伪代码)

读取空格字符串_如何读入带空格的字符串_c读取文件中空格

字::字(){_name.Sting::(0); //调用(int)构造函数_cnt = 0;}

成员初始化列表不是一组函数调用。 编译器一一操作初始化列表,以适当的顺序在构造函数中插入初始化操作,并在程序员显式编写代码之前完成。

列表中项目的顺序由类中声明成员的顺序决定,而不是由它们在初始化列表中的排列顺序决定。 “初始化顺序”和“初始化列表中的项目顺序”之间的混淆将导致意外错误:

类 X { int i; int j;:X(int值):j(值),i(j){}....};

上面代码编写的初衷就是将j的初始值设置为value,然后将i的初始值设置为j。 然而,由于i是在j之前声明的,所以初始化列表中的i(j)实际上比j(value)更早执行。

这会导致意外错误。 正确的写法应该是:

类 X { int i; 整数j;:

虽然这种写法仍然是i在j之前声明,但是不会出现错误,因为初始化列表中的项被插入到构造函数中,不再保持原来的声明顺序。 也就是说,初始化列表被插入到构造函数中。 初始化列表中的项目顺序优先于代码编写者显式声明的顺序。

上述涉及C++类的成员初始化列表相关的问题都是小编分享的内容。 希望能给大家一个参考,也希望大家支持词典教程网站。

标签: 初始 构造 函数

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码