C Implement a string class with basic functionality
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
// ------String.h------#ifndef STRING_H#define STRING_H#include <iostream>using namespace std;class String{
public: String(); String(int n, char c); String(const char* source); String(const String& s); // String& operator = (char* s); String& operator = (const String& s); ~String(); char& operator [] (int i){
return a[i];} const char& operator [] (int i) const {
return a[i];} // Indexer to constant. String& operator += (const String& s); int length(); friend istream& operator >> (istream& is, String& s); // Try to figure out why set ">>" friend function member. // friend bool operator < (const String& left,const String& right); friend bool operator > (const String& left, const String& right); // These three operators is not necessary to set them friend. Here is just for simplification. friend bool operator == (const String& left, const String& right); friend bool operator != (const String& left, const String& right);private: char* a; int size;};#endif
// ------String.cpp------#include "String.h"#include <cstring>#include <cstdlib>String::String(){ a = new char[1]; a[0] = '\0'; size = 0;}String::String(int n, char c){ a = new char[n + 1]; memset(a, c, n); a[n] = '\0'; size = n;}String::String(const char* source){ if(source == NULL) { a = new char[1]; a[0] = '\0'; size = 0; } else { size = strlen(source); a = new char[size + 1]; strcpy(a, source); }}String::String(const String& s){ size = strlen(s.a); a = new char[size + 1]; strcpy(a,s.a);}String& String::operator = (const String& s){ if(this == &s) return *this; else { delete[] a; size = strlen(s.a); a = new char[size + 1]; strcpy(a, s.a); return *this; }}String::~String(){ delete[] a;}String& String::operator += (const String& s){ int j = strlen(a); int size = j + strlen(s.a); char* tmp = new char[size + 1]; strcpy(tmp, a); strcpy(tmp + j, s.a); delete[] a; a = tmp; return *this;}int String::length(){ return strlen(a);}
// ------Main.cpp------#include <iostream>#include "String.h"using namespace std;bool operator == (const String& left, const String& right){ int a = strcmp(left.a, right.a); if(a == 0) { return true; } else { return false; }}bool operator != (const String& left, const String& right){ return !(left == right);}ostream& operator << (ostream& os, String& s){ int length = s.length(); for(int i = 0; i < length; i++) { os << s[i]; } return os;}String operator + (const String& a, const String& b){ String temp; temp = a; temp += b; return temp;}bool operator < (const String& left, const String& right){ int j = 0; while((left[j] != '\0') && (right[j] != '\0')) { if(left[j] < right[j]) { return true; } else { if(left[j] == right[j]) { j++; continue; } else { return false; } } } if((left[j] == '\0') && (right[j] != '\0')) { return true; } else { return false; }}bool operator > (const String& left, const String& right){ int a = strcmp(left.a, right.a); if(a > 0) { return true; } else { return false; }}istream& operator >> (istream& is, String& s){ delete[] s.a; s.a = new char[20]; int m = 20; char c; int i = 0; while(is.get(c) && isspace(c)); if(is) { do { s.a[i] = c; i++; if(i == m - 1) { s.a[i] = '\0'; char* b = new char[m]; strcpy(b, s.a); m = m * 2; s.a = new char[m]; strcpy(s.a, b); delete[] b; } } while (is.get(c) && !isspace(c)); if(is) { is.unget(); } } s.size = i; s.a[i] = '\0'; return is;}int main(){ String a = "abcd"; String b = "www"; String c(6, 'l'); String d; String e = a; String f; cin >> f; String g; g = a + b; if(a < b) { cout << "a < b" << endl; } else { cout << "a >= b" << endl; } if(e == a) { cout << "e == a" << endl; } else { cout << "e != a" << endl; } b += a; cout << a << endl; cout << b << endl; cout << c << endl; cout << d << endl; cout << e << endl; cout << f << endl; cout << g << endl; cout << g[0] << endl; return 0;}// Output:/*ta < be == aabcdwwwabcdllllllabcdtabcdwwwa*/
还没有评论,来说两句吧...