我好傻啊
这是本蒟蒻刚刚做完一道题在看题解时发出的呼喊声。。。
引出今天的主题前先给大家看道题吧
题目描述
输入输出格式
输入样例:
3
13 312 343
输出样例
34331213
看完题是不是感觉很简单,就是字符串的排序问题,因为string类自定义了大小排序,我们可以写一个CMP函数作为sort的第三个参数,但我们要注意的是我们比较的应该是a+b而不是a和b,为什么呢?因为当a和b分别为30和301时,30301>30130,如果比较的是a和b,那结果就是30130,就不合题意了。
然后看输入输出格式,输入的是n个正整数,如何将整数类型转换为string类型呢(埋下伏笔)
下面给大家总结一下C++中int类型与char,string类型的互换
一.int to string(整形到字符串)
(1)函数:int sprintf(char *buffer, const char *format [, argument] …);
头文件:#include<stdio.h>
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
int n;
char temp[64];
string str;
n = 1000;
sprintf(temp, "%d", n);
string s(temp);
//调用string的方法
cout<<s.c_str()<<endl; //1000
cout<<s.size()<<endl; //长度为4
}
(2)函数:char *itoa(int value, char *string, int radix);
头文件:#include<stdlib.h>
参数:
value:待转化的整数
radix:是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。
string:保存转换后得到的字符串
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
char buffer[20];
int n=3445;
itoa(n,buffer,10);
string s(buffer); //用于char转string
cout<<s<<endl; //输出3445
}
(3)函数:stringstream()(我认为比较好用的)
头文件:#include< sstream>
#include<iostream>
#include<sstream>
using namespace std;
int main(){
int n=25;
string s;
stringstream ss;
ss<<n;
//一种方法:调用string的方法
s=ss.str();
cout<<s.c_str()<<endl;
//第二种方法
ss>>s;
cout<<s;
}
(4)to_string函数(c++11新标准,有的编译器或OJ上还不支持)
int i=123;
string s=to_string(i);
二.char型数字转换为int型
(1)使用char-‘0’ 法
#include<iostream>
using namespace std;
int main(){
char c='2';
int n=c-'0';
cout<<n<<endl; //输出2
}
(2)使用atoi函数int atoi(const char *nptr);
功能:把字符串转换成整型
头文件: #include<stdlib.h>
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main(){
int n;
char str[] = "1234";
n = atoi(str);
cout<<n<<endl; //输出1234
return 0;
}
三.char、string类型的互换
(1)char转string
string s(char *);
(2)string 转char *
char *p = string.c_str();
然后我用的是上面int转string的第三种方法,下面是AC代码:
#include <bits/stdc++.h> //万能头文件
using namespace std;
bool cmp(string a,string b){ //注意比较的是a+b
return a+b>b+a;
}
int main(){
int n;
string a[21];
cin>>n;
for(int i=0;i<n;i++){
stringstream ss;
int m;
cin>>m;
ss<<m;
ss>>a[i];
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
cout<<a[i];
return 0;
}
好了,到文章结尾了,为什么一开始说我傻呢,因为当我做完之后去瞄一眼题解的时候,发现他们都是酱紫的:
#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];
}
???(黑脸)看懂了吗,我是不是傻的很可爱哈哈哈,可能是最近一直在刷字符串的题耍傻了
不过借此机会总借了一下C++中int类型与char,string类型的互换还是很有价值的^ - ^
如果想要得到更多知识,请关注我博客:wlis.blog.csdn.net
此博客不定期更新内容!!!感谢大家!!!