实现说明:字符串类String的简单实现,内部采用字符数组实现
运行平台:VS2010
参考:http://rsljdkt.iteye.com/blog/770072
经验说明:拷贝构造函数、重载赋值运算符、实现析构函数三个操作在实现自定义类时往往同时出现。
#include <iostream>
using namespace std;
class String{
public:
String(const char *str = NULL);//默认构造函数
String(const String &str);//复制构造函数
~String();//析构函数
String operator+(const String & str);//字符串连接
String & operator=(const String &str);//字符串赋值
bool operator==(const String &str);//判断是否字符串相等
int Length();//获取字符串长度
friend ostream & operator<<(ostream &o,const String &str);//重载输出
String SubStr(int start, int end);//求子字符串(start ... end-1)
private:
char * charArray;
};
String::String(const char *str)
{
if(str == NULL){
charArray=new char[1];
charArray[0]='\0';
}else{
charArray=new char[strlen(str)+1];
strcpy(charArray,str);
}
}
String::String(const String &str)
{
charArray = new char[strlen(str.charArray)+1];
strcpy(charArray,str.charArray);
}
String::~String()
{
delete [] charArray;
}
String String::operator+(const String &str)
{
String res;
delete [] res.charArray;//释放原有空间
res.charArray = new char[strlen(charArray)+strlen(str.charArray)+1];
strcpy(res.charArray,charArray);
strcpy(res.charArray+strlen(charArray),str.charArray);
return res;
}
String & String::operator=(const String &str)
{
if(charArray == str.charArray)
return *this;
delete [] charArray;
charArray = new char[strlen(str.charArray)+1];
strcpy(charArray,str.charArray);
return *this;
}
bool String::operator==(const String &str)
{
return strcmp(charArray,str.charArray) == 0;
}
int String::Length()
{
return strlen(charArray);
}
ostream & operator<<(ostream &o, const String &str)
{
o<<str.charArray;
return o;
}
String String::SubStr(int start, int end)
{
String res;
delete [] res.charArray;//释放原有内存
res.charArray = new char[end-start+1];//重新申请内存
for(int i=0; i+start<end; i++){
res.charArray[i]=charArray[start+i];
}
res.charArray[end-start] = '\0';
return res;
}
void test()
{
String s = "abcd";
String t = "abcd";
cout<<s<<(s==t?" == ":" != ")<<t<<endl;
String s2 = "Hello ";
String s3 = "China!";
cout<<s2+s3<<endl;
cout<<(s2+s3).SubStr(0,s2.Length()+s3.Length())<<endl;
}
int main()
{
test();
system("pause");
}
运行结果:
abcd == abcd
Hello China!
Hello China!
请按任意键继续. . .
分享到:
相关推荐
输入一个字符串,将输出该字符串最长对称子串及其长度,很精巧的算法
使用Java的String类操作字符串和子串。 实验内容: 1.写一个程序提示用户键入某一货币数量(以分为单位),该程序应计算出如何用最少量的1元,50分,10分和1分硬币得到该数目。如195分最少可以用一个1元硬币,1个50分...
# 给你一个字符串a和一个正整数n,判断a中是否存在长度为n的回文子串。 # 如果存在,则输出YES,否则输出NO。 # 回文串的定义:记串str逆序之后的字符串是str1,若str=str1,则称str是回文串,如"abcba". # 输入...
在随意给出的2个字符串中,找出它们共同的最长的子串。 【输入】 输入文件的第一行为一个整数2,接下来有2行,每行为一个字符串,每个字符串的长度均小于255。 【输出】 输出只有一行,即:共同的最长子串,若有多个...
java 获取字符串的子串 java 获取字符串的子串
输出字符串的子串。
本文实例讲述了C语言求两个字符串的最长公共子串的方法。分享给大家供大家参考。具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * ...
本测试数据是第265个测试用例,字符串长度100000,子串长度10000,正确的算法结果,最小覆盖子串长度应该为10742 下面是我的I7本地跑完的结果【网站超时】 函数 minWindow 的运行时间为 1233597.94 ms;执行结果 = ...
2、为string类提供必要的成员函数,可以参考C++类库的string类提供了那些成员函数,至少应包括下标访问,子串查找、获得C风格字符串、获得字符串长度、字符串比较这几个函数 3、利用该string类完成测试程序:统计一...
2、为string类提供必要的成员函数,可以参考C++类库的string类提供了那些成员函数,至少应包括下标访问,子串查找、获得C风格字符串、获得字符串长度、字符串比较这几个函数 3、利用该string类完成测试程序:统计一...
2、为string类提供必要的成员函数,可以参考C++类库的string类提供了那些成员函数,至少应包括下标访问,子串查找、获得C风格字符串、获得字符串长度、字符串比较这几个函数 3、利用该string类完成测试程序:统计一...
在一个字符串中查找第一个子串,并输出第一个子串的下标 如:This is a test message!为字符串 ,子串为 is 则输出为2
注意:每一个字符串的第一个元素存放的是该字符串的长度(不包括第一个元素),除串的赋值外,其他所有操作(比较、求子串的位置、串替换)等都不应包含该字符。 1.1.实验1:串赋值函数实现: 按照系统已经定义的...
此程序为VC6.0实现判断一个字符串是否为另一个字符串的子串
输入两个字符串, 求它们最长公共字串的长度
实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,String类是按字符截取 的,例如"中国abc".substring(1,3),将返回“国a”。这里 要求按字节截取,一个英文字符当一个字节,一个中文字符当两...
该文件实现了在两个字符串中寻找最大子串的算法,并附上代码,方便大家学习。
输出字符串的子串 java
在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将...
求N个字符串的最长公共子串,N,字符串长度不超过255。例如N=3,由键盘依次输入3个字符串为 Whatislocalbus? Namesomelocalbuses. loca1busisahighspeedI/Obusclosetotheprocessor. 则最长公共子串为“local...