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