博客诈尸更新啦。。。。
最近写题
发现string要比想象的强大的多。。。
以前一直觉得string只是字符数组包装了一个新的数据类型
然后直到遇到这道题
当然是个水题
于是直接写代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char maxn[150],tmp[150];
int main(){
maxn[0]='\0';
int n,maxnum;
cin>>n;
for(int nn=1;nn<=n;nn++){
scanf("%s",tmp);
int c1,c2;
for(c1=0;maxn[c1]!='\0';c1++);
for(c2=0;tmp[c2]!='\0';c2++);
if(c2>c1){swap(maxn,tmp);maxnum=nn;}
else if(c1==c2){
for(int i=0;i<c1;i++){
if(maxn[i]<tmp[i]){swap(maxn,tmp);maxnum=nn;break;}
else if(maxn[i]>tmp[i])break;
}
}
}
cout<<maxnum<<endl;
for(int i=0;maxn[i]!='\0';i++)cout<<maxn[i];
return 0;
}
AC后无聊翻题解
有一个大佬发了如下代码
#include<iostream>
using namespace std;
int main()
{
int n;
int number;//奇怪的变量命名,其实这个是用来记录为当上总统的人的号数
string max="";//赋初值,如果是全局变量的话不必要,但是 max 不可以当全局变量(会重名)
//如果一定要这样做的话,必须要去掉 using namespce std;,每个 cin 之类的之前都要加 std::
string in;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> in;
int inSize = in.size();
int maxSize = max.size();
if (inSize > maxSize || (inSize >= maxSize && in > max))
//逻辑运算符是短路运算符。即一旦能够确定整个表达式的值,就不再继续计算。
//所以这样写性能比几个 if 好些
//实际差距几乎没有
{
max = in;
number = i + 1;
}
}
cout << number << '\n' << max << '\n';
return 0;
}
原理:string的比较 保存数字的字符串=高精度版比较大小
然后就发先这个字符串还有玩法
于是又看到这道题
#include<iostream>
#include<algorithm>
using namespace std;
string a[21];
bool cmp(string a,string b)
{
return a+b>b+a;//a+b就是b接在a的后面
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)cout<<a[i];
}
看到//a+b就是b接在a的后面
就直接懵了。。。
写一下string的用法
赋值,添加,删除,替换,查找,比较,反向排序。
1.赋值
直接来就行:
string ss;
ss=”aaa”;
或者
string sa,sb;
cin>>sa;
sb=sa;
2.添加
在末尾加字符或字符串直接用加号:
string ss;
ss+=’a’;
ss+=”aaa”;
在中间插入一个字符用ss.insert()函数:
ss.insert(ss.begin()+1,’a’);//在ss[1]之前插入字符a
在中间插入一个字符串可以用替换函数ss.replace()
ss.replace(2,0,”aaa”);//从第二个字符开始将连续0个元素替换为aaa(就是将aaa插入到了第二个字符前面了)
3.删除
给ss赋空值ss=”“就是把整个字符串清空了。
用ss.erase()删除掉迭代器所指的一个或一个区间内(左闭右开)的元素。
string::iterator it=ss.begin();
ss.erase(it+1);
ss.erase(it+1,it+3);
4.替换
就是用ss.replace()函数,第一个参数表示从第几个字符开始,第二个参数表示一共替换几个,第三个参数表示换成的字符(串);
ss=”abcdefg”;
ss.replace(2,2,”999”);
结果ss为ab999efg;
5.查找
使用ss.find()函数,查得到则返回第一个下标,查不到返回4294967295
ss.find(“abc”);
6.比较
使用ss.compare()函数,ss大则返回1,小返回-1,相等返回0.
ss.compare(“abc”);
注:所谓“大”,是指字典序大(在字典中靠后)。
7.反向排序
直接reverse(ss.begin(),ss.end());