博客
关于我
码图:156 扩展String类(C++)
阅读量:378 次
发布时间:2019-03-05

本文共 2371 字,大约阅读时间需要 7 分钟。

题目描述:

扩展String类,引入头文件CString.h,它的内容如下:

#include 
using namespace std;class String{ protected: char *mystr; int len;public: String(const char *p){ len = strlen(p); mystr = new char[len+1]; strcpy(mystr,p); } ~String(){ if (mystr !=NULL) { delete []mystr; mystr = NULL; len = 0; } } void showStr(){ cout <

实现int IsSubString(int start, const char *str);

从start处开始判断str是否为字符串的子串,是则返回子串第一次出现处的下标位置(下标从0开始计算),否则返回-1;
例如:

EditString es("testtesttest");es.IsSubString(3,"test");//4

实现EditChar(char s, char d),用字符d代替所有字符s,例如:

EditString es("testtesttest");es.EditChar('t','a');//"aesaaesaaesa"

实现void EditSub(char * subs,char *subd),用字符串subd代替所有字符串subs,例如:

EditString es("testtesttest");es.EditChar(“test”,“str”);//"strstrstr"

实现void DeleteChar(char ch),将所有ch字符删除,例如:

EditString es("testtesttest");es.DeleteChar('t');//"eseses"

实现void DeleteSub(char * sub),将所有的字符串sub删除,例如:

EditString es("testtesttest");es.DeleteSub(”es“);//"tttttt";

实现:

#include"CString.h"int EditString::IsSubString(int start, const char* str){   	int i, j; 	for (i = 0; i < len; i++)	{   		int k = start+i;		for (j = 0; str[j] != '\0'; j++, k++)		{   			if (str[j] != mystr[k]) break;		}		if (str[j] == '\0') return start + i;	}	return -1;}void EditString::EditChar(char s, char d){   	int i = 0;	while (mystr[i])	{   		if (mystr[i] == s)			mystr[i] = d;		i++;	}}void EditString::EditSub(const char* subs,const char* subd)//提交时去掉const{   	int i, j,len_s=strlen(subs),len_d=strlen(subd);	for (i = 0; i < len; i++)	{   		int k = i;		for (j = 0; subs[j] != '\0'; j++, k++)		{   			if (subs[j] != mystr[k]) break;		}		if (subs[j] == '\0')		{   			int m = i + len_s;			while (mystr[m-1])//注意			{   				mystr[m + len_d - len_s] =mystr[m];				m++;			}			m = 0;			while (subd[m])			{   				mystr[i + m] = subd[m];				m++;			}						i += (len_d-1);		}	}}void EditString::DeleteChar(char ch){   	int i=0;	while (mystr[i])	{   		while (mystr[i] == ch)		{   			int j = i;			while (mystr[j])			{   				mystr[j] = mystr[j + 1];				j++;			}		}		i++;	}}void EditString::DeleteSub(const char* sub)//提交时去掉const{   	int i, j;	for (i = 0; i < len; i++)	{   		int k =  i;		for (j = 0; sub[j] != '\0'; j++, k++)		{   			if (sub[j] != mystr[k]) break;		}		if (sub[j] == '\0')		{   			int len = strlen(sub);			int m = i+len;			while (mystr[m-1])			{   				mystr[m - len] = mystr[m];				m++;			}		}	}}

转载地址:http://ivqg.baihongyu.com/

你可能感兴趣的文章
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>