1845 字符串类的实现 4

肇砖oj题,仅供参考,不怕被钟sir封号三周你就抄

Description

在上一题基础上,增加 myString字符串类 的方法:

  • 重载 小于比较运算符 <   : a 和 b 两个字符串对象,从头到尾比较a和b的对应位置字符,当 a.data[i] < b.data[i] 时,表达式 a < b 为真

  • 重载 大于比较运算符 >   : a 和 b 两个字符串对象,从头到尾比较a和b的对应位置字符,当 a.data[i] > b.data[i] 时,表达式 a > b 为真

  • 重载 不等于运算符 !=    : a 和 b 两个字符串对象,从头到尾比较a和b的对应位置字符,当 a.data[i] != b.data[i] 时,表达式 a != b 为真

  • 重载 等于比较运算符 ==  : 当 a 和 b 含字符个数相同且对应位置的字符相等时,表达式 a == b 为真

程序框架:

#include <iostream>
using namespace std;

你写的代码放在这里,包括类的定义和成员函数实现

int main() {
    myString a, b;

    cin >> a;
    cin >> b;

    if ( a == b ) {
        cout << "a == b" << endl;
    }
    else {
        if ( a > b ) {
            cout << "a > b" << endl;
        }
        else {
            if ( a < b ) {
                cout << "a < b" << endl;  
            }
        }
     }   

    return 0;
}

Input

第一行是一个字符串,表示对象a,字符串中不含空格

第二行是一个字符串,表示对象b,字符串中不含空格

Output

一行,参见输出样例

Sample Input

sample #1
abcd
abcd


sample #2
abce
abcef


sample #3
466
4655

Sample Output

sample #1
a == b

sample #2
a < b

sample #3
a > b

Author

John

#include <iostream>
using namespace std;

class myString{
	private:
		char *data;;
		int len;
	public:
		myString(){
			len=0;
			data=new char [len];
		}
		~myString(){
			delete []data;
		}

		myString &operator= ( const myString &b ){
			delete []data;
			len=b.len;
			data=new char[len];
		    for(int i=0;i<len;i++){
			data[i]=b.data[i];}
			return *this; 
		}

	friend ostream &operator<<(ostream &out,myString &c){
		if(c.len==0) out<<"0";
		else {
		 out<<c.len<<" : ";
		 for(int i=0;i<c.len;i++)
		 out<<c.data[i];
		}
		return out;
	}
	friend istream &operator >> (istream &in,myString &c){	   
		string d;
	    myString e;
		in>>d;
		c.len=0;
		while(d[e.len]!='\0')
		e.len++;
		e.data=new char [e.len];
		for(int i=0;i<e.len;i++)
		e.data[i]=d[i];
		c = e;
		return in;
	}
	bool operator !=(const myString &b){
		int t=1;
		if(len==b.len){
			t=0;
		for(int i=0;i<len;i++)
				if(data[i]!=b.data[i])
				t=1;
		}
		if(t==1) return true;
				return false;
	}
	bool operator ==(const myString &b){
		int t=1;
		if(len==b.len){
			t=0;
		for(int i=0;i<len;i++)
				if(data[i]!=b.data[i])
				t=1;
		}
		if(t==1) return false;
				return true;
	}
	bool operator <(const myString &b){
		string aa=this->data;
		string bb=b.data;
		if(aa<bb) return true;
		return false;
	}
	bool operator >(const myString &b){
        string aa=this->data;
		string bb=b.data;
		if(aa>bb) return true;
		return false;
	
	}
};
   

int main() {
    myString a, b;

    cin >> a;
    cin >> b;

    if ( a == b ) {
        cout << "a == b" << endl;
    }
    else {
        if ( a > b ) {
            cout << "a > b" << endl;
        }
        else {
           if ( a < b ) {
                cout << "a < b" << endl;  
           }
        }
     }   

    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想自己实现一个 C 字符串,你可以按照以下步骤来实现: 1. 定义结构体:首先,你需要定义一个结构体来存储字符串的相关信息。你可以包含一个字符数组来存储字符串的内容,以及一个整数来记录字符串的长度。 2. 实现初始化函数:接下来,你可以实现一个初始化函数,用于创建字符串的实例。你可以在这个函数中,根据传入的参数来初始化字符数组和长度变量。 3. 实现其他操作函数:然后,你可以根据你的需要,实现其他相关的操作函数。例如,你可以实现字符串拼接、比较、查找子串等操作。 4. 注意内存管理:在实现这个字符串时,要注意内存管理的问题。例如,在拼接字符串时,要注意重新分配内存空间,避免内存泄漏。 ### 回答2: C字符串是一种用于处理字符串的数据型。在实现一个C字符串时,我们首先需要定义一些基本的成员变量和方法。 成员变量: 1. `length`:表示字符串的长度。 2. `capacity`:表示字符串的总容量。 3. `data`:存储字符串字符数组。 方法: 1. `构造函数`:初始化字符串对象,设置初始容量和长度。 2. `析构函数`:释放字符串对象的内存空间。 3. `拷贝构造函数`:用于创建一个新的字符串对象,内容与已有对象相同。 4. `赋值运算符重载`:将一个字符串对象的内容复制给另一个对象。 5. `获取长度`:返回字符串的长度。 6. `获取容量`:返回字符串的总容量。 7. `获取字符串内容`:返回存储的字符串数据。 8. `修改字符串`:修改字符串对象中存储的字符串。 9. `连接字符串`:将两个字符串对象连接成一个新的字符串对象。 10. `比较字符串`:比较两个字符串对象的内容是否相同。 在实现C字符串时,需要注意以下几点: 1. 为了支持灵活的字符串长度,可以使用动态内存分配,通过`malloc`和`free`函数进行字符串内存的分配和释放。 2. 为了提高字符串的操作效率,可以动态调整字符串容量,根据实际需要进行扩容和缩容操作。 3. 在修改字符串时,需要注意边界条件和内存溢出的问题。 4. 在连接字符串时,可以先判断字符串对象的容量是否足够,如果不够,则进行扩容操作。 5. 在比较字符串时,可以逐个字符比较,直到遇到不相等的字符或者两个字符串的结束符。 通过实现一个C字符串,我们可以更方便地处理字符串操作,提高代码的可读性和可维护性。 ### 回答3: C语言中没有现成的字符串,但可以自己实现一个简单的字符串。 ``` #include <stdio.h> #include <string.h> #define MAX_LENGTH 100 typedef struct { char data[MAX_LENGTH]; int length; } MyString; void initialize(MyString* myStr) { memset(myStr->data, '\0', sizeof(myStr->data)); myStr->length = 0; } void assign(MyString* myStr, const char* source) { strncpy(myStr->data, source, MAX_LENGTH); myStr->length = strlen(myStr->data); } void concat(MyString* dest, const MyString* src) { strncat(dest->data, src->data, MAX_LENGTH-dest->length-1); dest->length = strlen(dest->data); } void print(const MyString* myStr) { printf("%s\n", myStr->data); } int main() { MyString str1; initialize(&str1); assign(&str1, "Hello"); print(&str1); MyString str2; initialize(&str2); assign(&str2, " World!"); concat(&str1, &str2); print(&str1); return 0; } ``` 上面的例子展示了一个简单的C字符串实现。该包含一个存储字符串数据的字符数组和一个记录字符串长度的整数。使用initialize函数初始化字符串对象,assign函数将给定的const char*字符串赋值给字符串对象,concat函数将另一个字符串对象追加到目标字符串对象的末尾,print函数将字符串对象打印到控制台。在main函数中展示了如何使用这个自定义的字符串

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值