//北邮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; }
没注意提示 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);