刚在杭电oj上做了个题目,想到用字符串string 的一些相关操作, 在这里记一下
这是那个题目描叙
|
排序Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 70918 Accepted Submission(s): 21780
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
Source
|
个人整理的string 的一些相关笔记:
读取整行字符串(带空格):
string n;
getline(cin,n);
头文件 #include <string>
声明一个字符串 st: string st;
拷贝构造函数生成st的复制字符串 s: string s(st);
将 st 的从第n+1个字符串开始到结束复制到a: string a(st,n);
复制指定位置n+1开始并指定复制长度 m: string b(st,n,m);
生成一个为 n 个 字符'c'的字符串: string c(n,'c'); //n int型
生成一个字符串ch: char ch[]={"abcdefg123"};
将ch的指定区间内的字符复制到d字符串: string d=(ch+x1,ch+x2); //x1 x2 int型
( x1 到 x2 不包括 x1 包括 x2 长度:x2-x1)
使用assign() 函数:
string st1="abcde132";
string st2="opqrst321";
string st3,st4; //声明字符串
st3.assign(st1,5,3); //"132" 从st1第 6 个开始长度为3的字符串
st4.assign(st2,2,string::npos); //"qrst321" 从st2第3个开始 直到结束
st1.swap(st2); //交换两个字符串的内容;
使用+=,append(),push_back() 在尾部添加字符:
string s;
s+=st1; //直接将字符串st1加到s上
s.append(st1,2,5); //将字符串st1的第3个开始长度为5的字符串加到s
s.append(st2,2,string::npos); //与前同 ( 3~ 结尾)
s.append(5,'c'); //将5个'c'字符加到s上
使用insert() 插入字符: 指定一个安插位置的索引, 被插入的字符串放在该索引后面;
s.insert(n,st); 从第 n+1个开始插入st字符串
erase删除字符:
s.erase(2,3); //从第三个字符(s[2])开始 删除3个字符
其他操作:
返回字符串长度: s.length(); s.size();
判断是否为空: s.empty(); //返回0 1
利用迭代器访问元素: string::iterator it=s.begin;it!=s.end();it++
string n;
getline(cin,n);
头文件 #include <string>
声明一个字符串 st: string st;
拷贝构造函数生成st的复制字符串 s: string s(st);
将 st 的从第n+1个字符串开始到结束复制到a: string a(st,n);
复制指定位置n+1开始并指定复制长度 m: string b(st,n,m);
生成一个为 n 个 字符'c'的字符串: string c(n,'c'); //n int型
生成一个字符串ch: char ch[]={"abcdefg123"};
将ch的指定区间内的字符复制到d字符串: string d=(ch+x1,ch+x2); //x1 x2 int型
( x1 到 x2 不包括 x1 包括 x2 长度:x2-x1)
使用assign() 函数:
string st1="abcde132";
string st2="opqrst321";
string st3,st4; //声明字符串
st3.assign(st1,5,3); //"132" 从st1第 6 个开始长度为3的字符串
st4.assign(st2,2,string::npos); //"qrst321" 从st2第3个开始 直到结束
st1.swap(st2); //交换两个字符串的内容;
使用+=,append(),push_back() 在尾部添加字符:
string s;
s+=st1; //直接将字符串st1加到s上
s.append(st1,2,5); //将字符串st1的第3个开始长度为5的字符串加到s
s.append(st2,2,string::npos); //与前同 ( 3~ 结尾)
s.append(5,'c'); //将5个'c'字符加到s上
使用insert() 插入字符: 指定一个安插位置的索引, 被插入的字符串放在该索引后面;
s.insert(n,st); 从第 n+1个开始插入st字符串
erase删除字符:
s.erase(2,3); //从第三个字符(s[2])开始 删除3个字符
其他操作:
返回字符串长度: s.length(); s.size();
判断是否为空: s.empty(); //返回0 1
利用迭代器访问元素: string::iterator it=s.begin;it!=s.end();it++