编程题#6 MyString 求大神解答

xiaoxiao2021-02-28  111

题目来自coursera

描述

请写出 MyString类,使得下面程序的输出结果符合下面的要求。

#include <cstring> #include <cstdlib> #include <string> #include <iostream> using namespace std; // 在此处补充你的代码 int CompareString( const void * e1, const void * e2) { MyString * s1 = (MyString * ) e1; MyString * s2 = (MyString * ) e2; if( * s1 < *s2 ) return -1; else if( *s1 == *s2) return 0; else if( *s1 > *s2 ) return 1; } int main() { MyString s1("abcd-"),s2,s3("efgh-"),s4(s1); MyString SArray[4] = {"big","me","about","take"}; cout << "1. " << s1 << s2 << s3<< s4<< endl; s4 = s3; s3 = s1 + s3; cout << "2. " << s1 << endl; cout << "3. " << s2 << endl; cout << "4. " << s3 << endl; cout << "5. " << s4 << endl; cout << "6. " << s1[2] << endl; s2 = s1; s1 = "ijkl-"; s1[2] = 'A' ; cout << "7. " << s2 << endl; cout << "8. " << s1 << endl; s1 += "mnop"; cout << "9. " << s1 << endl; s4 = "qrst-" + s2; cout << "10. " << s4 << endl; s1 = s2 + s4 + " uvw " + "xyz"; cout << "11. " << s1 << endl; qsort(SArray,4,sizeof(MyString),CompareString); for( int i = 0;i < 4;i ++ ) cout << SArray[i] << endl; //s1的从下标0开始长度为4的子串 cout << s1(0,4) << endl; //s1的从下标5开始长度为10的子串 cout << s1(5,10) << endl; return 0; }

输入

输出

1. abcd-efgh-abcd-

2. abcd-

3.

4. abcd-efgh-

5. efgh-

6. c

7. abcd-

8. ijAl-

9. ijAl-mnop

10. qrst-abcd-

11. abcd-qrst-abcd- uvw xyz

about

big

me

take

abcd

qrst-abcd-

样例输入无

样例输出 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8. ijAl- 9. ijAl-mnop 10. qrst-abcd- 11. abcd-qrst-abcd- uvw xyz about big me take abcd qrst-abcd- 我的代码:不知道为什么到11行结束就运行出错,被迫中止了,求大神解答 #include <cstring> #include <cstdlib> #include <string> #include <iostream> using namespace std; // 在此处补充你的代码 class MyString{ private : string str; public: //2.三种构造函数 MyString() :str(""){} //MyString(const char* str) :str(str){}//本来就没想写这句,ideonline上说数组的哪一行110,有错,char[4]不能转为myatring //但是写了反而多了个error:125行s4=等号出错,对应多个,不懂 MyString(string s) :str(s){} MyString(const MyString & s) :str(s.str){} //1.重载<、==、> friend bool operator <(const MyString & a, const MyString &b){ if (a.str.length()>b.str.length())return false; string::const_iterator it1 = a.str.begin(),it2=b.str.begin(); for (; it1 != a.str.end(); it1++,it2++){ if ((*it1) < (*it2))return true; } return false; } friend bool operator ==(const MyString & a, const MyString &b){ if (a.str.compare(b.str) == 0){ return true; } return false; } friend bool operator >(const MyString & a, const MyString &b){ if (a.str.compare(b.str) > 0){ return true; } return false; } //3.<< friend ostream & operator << (ostream & out,const MyString & s){ out << s.str; return out; } //4.[] char & operator [](int i){ return str.at(i); }//6.() string operator()(int a, int b){ return str.substr(a, b); } //7.+ string operator+(const MyString &s){ return str + s.str; } void operator+=(string s){ str += s; } friend string operator+(string s, const MyString &b){ return s + b.str; } //8.= void operator=(string s){ str = s; } }; int CompareString(const void * e1, const void * e2) { MyString * s1 = (MyString *)e1; MyString * s2 = (MyString *)e2; if (*s1 < *s2)//1.重载> == < return -1; else if (*s1 == *s2) return 0; else if (*s1 > *s2) return 1; } int main() { MyString s1("abcd-"), s2, s3("efgh-"), s4(s1);//2.两种构造函数 MyString SArray[4] = { "big", "me", "about", "take" }; cout << "1. " << s1 << s2 << s3 << s4 << endl; s4 = s3; s3 = s1 + s3;//5.+ cout << "2. " << s1 << endl;//3.重载<< cout << "3. " << s2 << endl; cout << "4. " << s3 << endl; cout << "5. " << s4 << endl; cout << "6. " << s1[2] << endl;//4.重载[] s2 = s1; s1 = "ijkl-";//5.= s1[2] = 'A'; cout << "7. " << s2 << endl; cout << "8. " << s1 << endl; s1 += "mnop";//+ cout << "9. " << s1 << endl; s4 = "qrst-" + s2; cout << "10. " << s4 << endl; s1 = s2 + s4 + " uvw " + "xyz"; cout << "11. " << s1 << endl; qsort(SArray, 4, sizeof(MyString), CompareString); for (int i = 0; i < 4; i++) cout << SArray[i] << endl; //s1的从下标0开始长度为4的子串 cout << s1(0, 4) << endl;//6.() //s1的从下标5开始长度为10的子串 cout << s1(5, 10) << endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-45119.html

最新回复(0)