优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++|使用与实现字符串操作函数、字符串类及成员函数

nanyue 2024-08-02 17:59:46 技术文章 10 ℃

字符串其实质是一个字符数组,可以用一个指针字符指向它,用可以用类来封装。

概述:

1 使用字符串操作函数(求长度与连接)

头文件:<string.h>

库函数:strlen()、strcat();

2 实现字符串操作函数(求长度与连接)

3 使用字符串类成员函数(求长度与连接)

头文件:<string>

对象方法:.length()

使用重载运算符:+

4 实现字符串及成员函数(求长度与连接)

1 使用字符串操作函数(求长度与连接)

2 实现字符串操作函数(求长度与连接)

3 使用字符串类成员函数(求长度与连接)

4 实现字符串及成员函数(求长度与连接)

附代码1

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
	char sa[55]="abcde";
	char sb[]="12345";
	strcat(sa,sb);
	cout<<sa<<"' length:"<<strlen(sa)<<endl;
	getchar();
	return 0;
}
//abcde12345' length:10

附代码2

#include <iostream>
using namespace std;
int strlen(char* str)
{
	int i=0;
	while(*str!='\0')
	{
		++i;
		++str;
	}
	return i;
}
void strlink(char a[], char b[])
{
	int i = strlen(a);
	for(int j=0;b[j]!='\0';++i,++j)
	{
		a[i]=b[j];
	}
}
int main()
{
	char sa[55]="abcde";
	char sb[]="12345";
	strlink(sa,sb);
	cout<<sa<<"' length:"<<strlen(sa)<<endl;
	getchar();
	return 0;
}
//abcde12345' length:10

附代码3:

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string sa ="abcde";
	string sb ="12345";
	string sc = sa+sb;
	cout<<sc<<"'s length:"<<sc.length()<<endl;
	getchar();
	return 0;
}
//abcde12345's length:10

附代码4:

#include <iostream>
#include "stdlib.h"
#include <string.h>				// 引用C语言字符串操作函数
//using namespace std;				// cannot access private member
using std::cin;
using std::cout;
using std::ostream;
using std::istream;
using std::endl;
class MyString
{
private:
 char* m_data;									// 一个字符指针作为数据域
public:
 MyString(const char *str =NULL);				// 构造函数
 MyString(const MyString &strs );				// 复制
 ~MyString();									// 析构函数
 MyString & operator =(const MyString &strs);	// 重载运算符=
 MyString operator +(const MyString &strs);	// 重载运算符+
 int getLength();								// 返回长度
public:																// 声明友元函数
 friend istream & operator >>(istream &_in, MyString &strs);		// 友元重载运算符>>
 friend ostream & operator <<(ostream &_out, MyString &strs);	// 友元重载运算符<<
};
 
MyString::MyString(const char *str)
{
 if (str == NULL){
 m_data = new char[1];
 *m_data = '\0';
 }
 else{
 int length = strlen(str);
 m_data = new char[length + 1];
 strcpy(m_data, str);
 }
}
 
MyString::~MyString()
{
 if (m_data)
 {
 delete[] m_data;
 m_data = 0;
 }
}
MyString::MyString(const MyString &strs)
{
 if (!strs.m_data) //外边没数据等于0
 {
 m_data = 0;
 }
 m_data = new char[strlen(strs.m_data)+1];
 strcpy(m_data, strs.m_data);
}
 
MyString & MyString::operator=(const MyString &strs)
{
 if (this != &strs)
 {
 delete[] m_data;
 if (!strs.m_data)
 {
 m_data = 0;
 }
 else{
 m_data = new char[strlen(strs.m_data)+1];
 strcpy(m_data,strs.m_data);
 }
 }
 return *this;
}
int MyString::getLength()
{
 return strlen(m_data);
 
}
//friend
istream & operator >>(istream & _in, MyString & strs)
{
 _in >> strs.m_data;
 return _in;
}
ostream & operator <<(ostream &_out, MyString &strs)
{
 _out << strs.m_data;
 return _out;
}
MyString MyString::operator+(const MyString &strs)
{ //新建一个MyString对象
 MyString newMyString;
 if (!strs.m_data)
 {
 newMyString = *this;
 }
 else if (!m_data)
 {
 newMyString = strs;
 }
 else{
 newMyString.m_data = new char[strlen(m_data)+strlen(strs.m_data)+1];
 strcpy(newMyString.m_data ,m_data);
 strcat(newMyString.m_data,strs.m_data);
 }
 
 return newMyString;
}
 
 
int main( )
{ MyString str1 ="wwu";
 int n =str1.getLength(); 
 cout <<str1<<"'s length:"<< n <<endl;
 MyString str2 ="hn";
 cout <<str2<<"'s length:"<<str2.getLength()<<endl;
	
 MyString str3(str1);
	str1 = "wqwu";
 cout <<str3<<"'s lentgh:"<<str3.getLength()<<endl;
 MyString str4 = str1+str2;
 cout<<str4<<"'s length:"<<str4.getLength()<<endl;
 cin.get();
 return 0;
}
/*output:
wwu's length:3
hn's length:2
wwu's lentgh:3
wqwuhn's length:6
*/

-End-

最近发表
标签列表