职工有薪水了---动态字符串

输入代码:

/*
*Copyright (c)2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:sum123.cpp
*作    者:林海云
*完成日期:2015年5月29日
*版 本 号:v2.0
*
*问题描述: 字符串除了用C++扩充的string类型外,按C语言的传统,还可以用char *表示。
           请将类声明中的string全部改为char *后,重新写一遍程序(此时的区别是,类中有指针成员,构造和析构函数需要考虑深复制的问题了。)
*程序输入:姓名,身份证号,性别,年龄,职业,工资
*程序输出:定义函数的信息
*/
#include<iostream>
#include<string.h>
#include<iomanip>
using namespace std;
class CPerson
{
protected:
    char *m_szName;
    char *m_szId;
    int m_nSex;
    int m_nAge;
public:
    CPerson(char *name,char *id,int sex,int age);
    void Show1();
    ~CPerson();
};
class CEmployee:public CPerson
{
private:
    char *m_szDepartment;
    float m_Salary;
public:
    CEmployee(char *name,char *id,int sex,int age,char *department,float salary);
    void Show2();
    ~CEmployee();
};
CPerson::CPerson(char *name,char *id,int sex,int age)
{
    m_szName=new char(strlen(name)+1);
    strcpy(m_szName,name);
    m_szId=new char(strlen(name)+1);//定义动态指针数组
    strcpy(m_szId,id);
    m_nSex=sex;
    m_nAge=age;
}
void CPerson::Show1()
{
    cout<<setw(10)<<m_szName<<setw(5)<<m_szId<<setw(25);
    if(m_nSex==0)
        cout<<"women";
    else
        cout<<"men";
    cout<<setw(5)<<m_nAge<<endl;
}
CPerson::~CPerson()
{
    delete [] m_szName;//用指针表示字符串数组时用完应删除
    delete [] m_szId;
}
CEmployee::CEmployee(char *name,char *id,int sex,int age,char *department,float salary):CPerson(name,id,sex,age)//表示派生后的引用元素应加:来调用
{
    m_szDepartment=new char(strlen(department)+1);
    strcpy( m_szDepartment,department);
    m_Salary=salary;
}
void CEmployee::Show2()
{
    cout<<"name"<<setw(10)<<"id"<<setw(25)<<"sex"<<setw(10)<<"age"<<setw(10)<<"department"<<setw(10)<<"salary"<<endl;
    cout<<m_szName<<setw(20)<<m_szId<<setw(10);
    if(m_nSex==0)
        cout<<"women";
    else
        cout<<"men";
    cout<<setw(10)<<m_nAge<<setw(10)<<m_szDepartment<<setw(10)<<m_Salary<<endl;
}
CEmployee::~CEmployee()
{
    delete [] m_szDepartment;
}
int main()
{
    char name[10],id[19],department[10];
    int sex,age;
    float salary;
    cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:"<<endl;
    cin>>name>>id>>sex>>age>>department>>salary;
    CEmployee employee1(name,id,sex,age,department,salary);
    employee1.Show2();
    return 0;
}

运行结果:

时间: 2024-10-26 19:52:55

职工有薪水了---动态字符串的相关文章

动态字符串的存储结构的实现

/***毕竟这只是简单的串的链式存储结构,不过不同的对象操作不一样 *在此为了简化操作,很多菜单啊,选择结构之类的都省去了,这些都可以在之前的一些链表的基本的错中 *可以得到的仔细的结果,链表的操作是特别的重要的 ,尤其是链表的存储结构链式存储结构涉及到开辟空间 *地址的传递,指针等操作,所以在此有必要仔细研究这些,这是我系统的重新对数据结构重新编写一遍的结果 *纯属于个人的理解和分析的结果 */ 效果: 代码:/***链式的串存储结构的实现 **/#include <iostream>#in

MySQL动态字符串处理DYNAMIC_STRING

MySQL中,常常会看到一些关于动态字符串的处理,列如:DYNAMIC_STRING. 为了记录动态字符串的实际长度,缓冲区的最大长度,以及每次字符串需要调整时,及时分配新的内存,以及调整长度.MySQL使用了DYNAMIC_STRING来保存动态字符串相关的信息: typedef struct st_dynamic_string { char *str; size_t length, max_length, alloc_increment; } DYNAMIC_STRING; 在这个结构体中,

Redis数据结构(一)简单动态字符串

Redis的字符串采用的是自定义的struct,名字叫做简单动态字符串(simple dynamic string,SDS). 结构如下: struct sdshdr{ int len; int free; char buf[]; }; 采用如此结构的好处是: [1]获取length的时候复杂度为O(1),不需要O(n): [2]动态分配空间,避免缓冲区溢出,避免每次修改或者append都重新分配: [3]二进制安全: 关于第一点显而易见,第二点,为了减少修改字符串带来的内存重分配次数,redi

自已动手写Redis【简单动态字符串序列一】

第一章 简单动态字符串 2.1 引言 字符串String是程序设计中最为常见的一种数据结构,也是最为重要的一种数据结构,Hello World!这个最为精典的程序,是绝大部份人学习一种程序设计语言的入门程序,在这个最为精典的入门程序中,Hello World!就是字符串类型,字符串可以用于软件中信息的提醒.保存等,Redis中key都是String类型的,因此了解String类型对于我们了解Redis以及动手写Redis都是非常有益的. 2.2 字符串基本概念 以上是我们最为熟悉的Hello W

SDS(Simple Dynamic String)一个简易动态字符串库

SDS(Simple Dynamic Strings)是一个C语言字符串库,设计中增加了从堆上分配内存的字符串,来扩充有限的libc字符处理的功能,使得: 使用更简便 二进制安全 计算更有效率 而且仍旧…兼容一般的C字符串功能 它使用另一种设计来实现,不用C结构体来表现一个字符串,而是使用一个二进制的前缀(prefix),保存在实际的指向字符串的指针之前,SDS将其返回给用户. C 1 2 3 4 5 +--------+-------------------------------+-----

Redis的动态字符串实现

sds动态字符串数据结构如下: 1 typedef char *sds; 2 3 struct sdshdr { 4 int len; 5 int free; 6 char buf[]; 7 }; len记录字符串的长度,free记录sds还剩余的空间,buf指向存储字符的空间. 对应的内存空间如下图: 例如最开始要存放字符串“chenrancc”: 一般开始的时候会比初始字符串多申请一个长度的空间放\0,如上图所示,对应的函数是sdsnewlen.删除后面的cc字符后: 删除后面的cc字符后,

Redis源码解析01: 简单动态字符串SDS

Redis没有直接使用C字符串(以'\0'结尾的字符数组),而是构建了一种名为简单动态字符串( simple  dynamic  string, SDS)的抽象类型,SDS设计API实现对字符串的各种修改. 1:SDS的定义 在sds.h中,定义了结构体sdshdr表示SDS,其定义如下: struct sdshdr { unsigned int len; unsigned int free; char buf[]; }; len记录SDS保存的字符串的长度(不包括末尾的'\0'):free记录

redis 简单动态字符串 SDS

redis 没有直接使用c语言传统的字符串表示,而是自己构建了简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示 redis的数据库里面,包含字符串值的键值对在底层都是SDS实现的 执行 rpush fruits "apple" "banana" "pits" 那么redis将在数据库中创建一个新的键值对,其中: 1.键值对的键是一个字符串对象,对象的底层实现是一个保存了字符串的fruits的SDS 2.键值对的值是一个

Redis数据结构之简单动态字符串

Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将SDS用作Redis的默认字符串表示.在Redis中,C字符串只会作为字符串字面量,用在一些无需对字符串值进行修改的地方,例如打印日志. 一.SDS的结构定义 示例: 二.SDS与C字符串的区别1. 常数复杂度获取字符串长度C字符串长度计算:遍历整个字符串直至遇到代表字符串结尾的空字符,时间复杂度为O(N).SDS长