九度OJ 题目1177:查找
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:554 解决:130
题目描述:
读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1、翻转 从下标为i的字符开始到i+len-1之间的字符串倒序;2、替换 命中如果第一位为1,用命令的第四位开始到最后的字符串替换原读入的字符串下标 i 到 i+len-1的字符串。每次执行一条命令后新的字符串代替旧的字符串(即下一条命令在作用在得到的新字符串上)。
命令格式:第一位0代表翻转,1代表替换;第二位代表待操作的字符串的起始下标int i;第三位表示需要操作的字符串长度int len。
输入:
输入有多组数据。
每组输入一个字符串(不大于100)然后输入n,再输入n条指令(指令一定有效)。
输出:
根据指令对字符串操作后输出结果。
样例输入:
bac
2
003
112as
样例输出:
cab
cas
九度OJ 题目1178:复数集合
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:669 解决:103
题目描述:
一个复数(x+iy)集合,两种操作作用在该集合上:
1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;
2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;
最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
输入:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后再输入n条指令。
输出:
根据指令输出结果。
样例输入:
3
Pop
Insert 1+i2
Pop
样例输出:
empty
SIZE = 1
1+i2
SIZE = 0
提示:
模相等的输出b较小的复数。
a和b都是非负数。
附上第一题需要用的库函数的说明 网上找的 很详尽
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:554 解决:130
题目描述:
读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1、翻转 从下标为i的字符开始到i+len-1之间的字符串倒序;2、替换 命中如果第一位为1,用命令的第四位开始到最后的字符串替换原读入的字符串下标 i 到 i+len-1的字符串。每次执行一条命令后新的字符串代替旧的字符串(即下一条命令在作用在得到的新字符串上)。
命令格式:第一位0代表翻转,1代表替换;第二位代表待操作的字符串的起始下标int i;第三位表示需要操作的字符串长度int len。
输入:
输入有多组数据。
每组输入一个字符串(不大于100)然后输入n,再输入n条指令(指令一定有效)。
输出:
根据指令对字符串操作后输出结果。
样例输入:
bac
2
003
112as
样例输出:
cab
cas
//北邮2011网院:1177:查找
//命令格式:第一位0代表翻转,1代表替换;
//第二位代表待操作的字符串的起始下标int i;
//第三位表示需要操作的字符串长度int len。
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int i, j, k, n, m;
int start, len;
string s, t, temp;
ifstream cin("BUPT_1177.txt");//
while( cin >> s >> n ){
for( i=0; i<n; i++ ){
cin >> t;
start = t[1]-48;
len = t[2] - 48;
//cout << start << " " << len << endl;//
if( t[0] == '0' ){ //翻转命令 别忘了单引号
temp = s.substr(start,len);
//cout << temp << endl;//
reverse(temp.begin(), temp.end());
}
else
temp = t.substr(3,t.length()-3);
s = s.erase(start,len);
s.insert(start,temp);
cout << s << endl;
}
}
system("pause");//
return 0;
}
九度OJ 题目1178:复数集合
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:669 解决:103
题目描述:
一个复数(x+iy)集合,两种操作作用在该集合上:
1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;
2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;
最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
输入:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后再输入n条指令。
输出:
根据指令输出结果。
样例输入:
3
Pop
Insert 1+i2
Pop
样例输出:
empty
SIZE = 1
1+i2
SIZE = 0
提示:
模相等的输出b较小的复数。
a和b都是非负数。
没注意提示 WA了好几次orz 稍微有点复杂 不过并不算难
//北邮2011网院:1178:复数集合
//Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,
//不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;
//Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;
//n条指令 (1<=n<=1000)
//提示:模相等的输出b较小的复数。 a和b都是非负数。
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
struct COMPLEX{
int a, b;
};
COMPLEX c[1000];
int StringToNum( string s ){
int i, len, r;
len = s.length();
for( i=0; i<len; i++ ){
if( i==0 )
r = s[i]-48;
else r = r*10 + s[i]-48;
}
return r;
};
int module( COMPLEX x ){
return x.a*x.a+x.b*x.b;
};
bool cmp( COMPLEX x, COMPLEX y ){
int xm = module(x), ym = module(y);
if( xm==ym )
return x.a < y.a;
return xm < ym;
};
int main()
{
int i, j, k, n, m;
int len, size;
string t, s, temp, aS, bS; //t=命令
ifstream cin("BUPT_1178.txt");//
while( cin >> n ){
size = 0;
for( i=0; i<n; i++ ){
cin >> t;
if( t == "Pop" ){
//cout << "i=" << i << " ";//
if( size == 0 )
cout << "empty\n";
else{
sort(c,c+size,cmp);
cout << c[size-1].a << "+i" << c[size-1].b << endl;
size--;
cout << "SIZE = " << size << endl;
}
}
else{ //Insert命令
cin >> s;
len = s.length();
for( j=0; j<len; j++ )
if( s[j]=='+' )
break;
aS = s.substr(0,j);
bS = s.substr(j+2); //不给出长度就默认到结尾
//cout << aS << " " << bS << endl;//
c[size].a = StringToNum(aS);
c[size].b = StringToNum(bS);
size++;
cout << "SIZE = " << size << endl;
}
}// for
}
system("pause");//
return 0;
}
附上第一题需要用的库函数的说明 网上找的 很详尽
===========以下内容为转载===========
C:
char st[100];
1. 字符串长度
strlen(st);
2. 字符串比较
strcmp(st1,st2);
strncmp(st1,st2,n); 把st1,st2的前n个进行比较。
3. 附加
strcat(st1,st2);
strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加'\0'。
4. 替换
strcpy(st1,st2);
strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加'\0'。
5. 查找
where = strchr(st,ch) ch为要找的字符。
where = strspn(st1,st2); 查找字符串。
where = strstr(st1,st2);
C++:
<string>
string str;
1. 字符串长度
len = str.length();
len = str.size();
2. 字符串比较
可以直接比较
也可以:
str1.compare(str2);
str1.compare(pos1,len1,str2,pos2,len2); 值为负,0 ,正。
nops 长度到完。
3. 附加
str1 += str2;
或
str1.append(str2);
str1.append(str2.pos2,len2);
4. 字符串提取
str2 = str1.substr();
str2 = str1.substr(pos1);
str2 = str1.substr(pos1,len1);
string a=s.substr(0,4); //获得字符串s中 从第0位开始的长度为4的字符串
5. 字符串搜索
where = str1.find(str2);
where = str1.find(str2,pos1); pos1是从str1的第几位开始。
where = str1.rfind(str2); 从后往前搜。
6. 插入字符串
不是赋值语句。
str1.insert(pos1,str2);
str1.insert(pos1,str2,pos2,len2);
str1.insert(pos1,numchar,char); numchar是插入次数,char是要插入的字符。
7. 替换字符串
str1.replace(pos1,str2);
str1.replace(pos1,str2,pos2,len2);
8. 删除字符串
str.erase(pos,len)
str.clear();
9. 交换字符串
swap(str1,str2);
10. C --> C++
char *cstr = "Hello";
string str1;
cstr = cstr;
string str2(cstr);