运算符重载附加篇——字符串(OI选手专用)

听作者讲骚话

这是我写完结构体之后的故事了…
后来有一位比霍金还sao的很年轻漂亮苗条老女人 来问我说碰到结构体包含二维数组怎么办
(⊙o⊙)…
其实排序的时候,sort交换元素使用的就是类似swap的东西,会交换对象的所有地址。
因此你可以把二维三维四维五六七八维都往结构体里扔,这是没有关系的。
如果要在一个结构体里扔很多字符串,不建议使用C++类字符串
就是这个东西:

string a[maxm];
string ss;

这种字符串用起来比较方便,但是很慢(或者说我们使用这个简直是高射炮打蚊子),string的本质是C++ STL库中封装的一个容器并且捆绑了很多函数,我们OI中使用string仅仅是为了存字符串,而不像真正的程序猿们一样要处理很多诡异的东西。
目的纯粹,所以使用C类字符串:

char s[maxm];

这类字符串本质就是字符数组,结尾默认带上’\0’的那种。也是可以使用字符串处理的基本函数。

字符串读入输出小全

以下内容都是C类字符串[手动滑稽]
注: < Space >< CR > 带有此标记指忽略空格或回车的意思
扯一下string
对于string ss下面给出一些合法的输入输出关系:

InputOutput
cin>>sscout<<ss
cin>>ssprintf("%s",ss.c_str())
scanf("%s",ss.c_str())printf("%s",ss.c_str())

对于char a[100] 下面给出一些合法的输入输出关系:
其中puts输出会自动换行

InputOutput
cin>>acout<<a
cin>>aprintf("%s",a)
cin>>aputs(a) < Space >
scanf("%s",a)printf("%s",a)
scanf("%s",a)cout<<a
scanf("%s",a)puts(a) < Space >
cin.getline(a,sizeof(a)) < Space >printf("%s",a)
cin.getline(a,sizeof(a)) < Space >cout<<a
cin.getline(a,sizeof(a)) < Space >puts(a) < Space >
gets(a) < Space >printf("%s",a)
gets(a) < Space >cout<<a
gets(a) < Space >puts(a) < Space >

字符串捆绑排序

解释在上一回里都有,这里不再多说,以下是字符串和数字捆绑排序的代码:
上一回的传送门:[手动滑稽的运算符重载和捆绑排序]

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxm=1001; 
int n,k;
struct node{
	int num;
	char a[maxm][maxm];
	node(){num=0;memset(a,0,sizeof(a));return;}
	bool operator < (const node &x)const{
		if(num<x.num) return true;
		return false;
	}
}d[maxm];

int main(){
	std::ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>d[i].num>>k;
		for(int j=1;j<=k;j++){
			cin>>d[i].a[j];
		}
	}
	sort(d+1,d+n+1);
	for(int i=1;i<=n;i++){
		cout<<d[i].num<<"   ";
	}cout<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=5;j++){
			puts(d[i].a[j]);
			cout<<" ";
		}cout<<endl;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值