1250: 语言战争
时间限制: 1 Sec 内存限制: 64 MB提交: 203 解决: 46
题目描述
llc和yrc语言的优劣一直都是大家所争论的焦点,但它们之间最大的区别无非是在标识符(变量)命名上。由多个单词组成的llc标识符命名规则如下:
第一个单词的首字符小写,接下来其他单词都是大写字母开头,单词之间没有其他分隔符。例如:longAndMemonicIdentifier,name,nEERc,xiXiHaHa都是合法的llc标识符。
而yrc语言的标识符只用小写字母,单词之间用下划线_隔开。例如:long_and_memonic_identifier,name,n_e_e_rc,xi_xi_ha_ha都是符合规则的yrc标识符。
输入
输入一行,只可能含有英文字母和下划线的一个标识符。
输出
如果输入的标识符是llc标识符,输出对应的yrc标识符。如果输入的是yrc标识符,输出对应的llc标识符。如果都不是,输出DouWo
样例输入
样例输出
erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
// 在 string 字符前(位置可以指定) 插入 char 类型字符串
basic_string <char> str1a ( "way" );
const char *cstr1a = "a";
str1a.insert ( 0, cstr1a ); // 0 可调整位置
cout << "The string with a C-string inserted at position 0 is: "
<< str1a << "." << endl;
// 结果 str1a = away.
一个插入一个删除,两种方法在《c++ primer plus》 P875中有提到
不方便的话参考博文:http://blog.csdn.net/zhanglu5227/article/details/8604824和http://www.cnblogs.com/ylwn817/articles/1967689.html
这题在当时比赛的时候都来不及看,事实证明有些东西还是要练习的。
最后附上代码:
#include <iostream> #include<math.h> #include <iomanip> #include<cstdio> #include<string> #include<map> #include<vector> #include<list> #include<algorithm> #include<stdlib.h> #include<iterator> #include<sstream> #include<string.h> #include<stdio.h> using namespace std; //1250 int main() { string a; int i,j,k; int flag; while(cin>>a) { flag=0; int len=a.length(); for(i=0;i<len;i++)//就是出现又是大写又有下划线的情况 { if(a[i]=='_') { for(i=0;i<len;i++) { if(a[i]>='A'&&a[i]<='Z') { flag=1; } } } } //开始处理正常情况 for(i=0;i<a.length();i++) { if(a[i]>='A'&&a[i]<='Z')//就是有大写的情况llc { a[i]=a[i]+32; a.insert(i,"_"); //i++; } else if(a[i]=='_') { a[i+1]=a[i+1]-32; string::iterator it; it=a.begin()+i; a.erase(it); //i++; } } if(flag==1) { cout<<"DouWo"<<endl; } else{ cout<<a<<endl; } } return 0; }