字符串其实质是一个字符数组,可以用一个指针字符指向它,用可以用类来封装。
概述:
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-
