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

样例输入

longAndMemonicIdentifier

样例输出

long_and_memonic_identifier
 
题目大意:中文,没什么好解释的。
解题思路:
分三种情况:
1.就是都不是的情况,就是string中既有大写字母又有“_”,就直接把flag标志变为1;
2.就是llc,首字母小写中间可能有大写,然后就是如果有大写的,就把那个大写变成小写(+32),然后在那个位置insert一个“_”;
3.就是yrc的情况,就是中间有“_”,那就是把那个之后的那个字母给变大写,然后删除那个“_”即可。
 
这边要用到string类的一些库函数:
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;
//
int main()
{
string a;
int i,j,k;
int flag;
while(cin>>a)
{
flag=;
int len=a.length();
for(i=;i<len;i++)//就是出现又是大写又有下划线的情况
{
if(a[i]=='_')
{
for(i=;i<len;i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
flag=;
}
}
}
} //开始处理正常情况
for(i=;i<a.length();i++)
{
if(a[i]>='A'&&a[i]<='Z')//就是有大写的情况llc
{
a[i]=a[i]+;
a.insert(i,"_");
//i++; }
else if(a[i]=='_')
{
a[i+]=a[i+]-;
string::iterator it;
it=a.begin()+i;
a.erase(it);
//i++;
}
} if(flag==)
{
cout<<"DouWo"<<endl;
}
else{
cout<<a<<endl;
} }
return ;
}

最新文章

  1. spring 配置bean
  2. openfire源码修改聊天消息发送内容
  3. ls
  4. [CS231n-CNN] Training Neural Networks Part 1 : parameter updates, ensembles, dropout
  5. poj 1236 scc强连通分量
  6. [转]Linux之type命令
  7. 《Python 学习手册4th》 第十六章 函数基础
  8. plsql导入导出表
  9. C#简单的tcpserver
  10. SVNclient安装与使用
  11. css background-position (图片裁取)
  12. strstr()与find()
  13. oracle填坑之PLSQL中文显示为问号
  14. day 41 标准文档流 浮动
  15. 转载 linux常用的监控命令工具
  16. [转]linux 调用动态库so文件
  17. 10、MySQL 的复制
  18. Jmeter使用笔记之意料之外的
  19. @PropertySource加载文件的两种用法以及配置文件加载顺序
  20. Spring学习笔记之Container overview

热门文章

  1. C. Grid game 思维+问题转化
  2. Django_模板
  3. git 提交的时候 建立排除文件夹或者文件
  4. Java学习笔记(十)面向对象---接口
  5. 使用SqlDataReader的查询操作
  6. gbase安装教程
  7. vue使用axios访问后台接口
  8. [lua]紫猫lua教程-命令宝典-L1-01-06. 循环结构
  9. 前端——语言——Core JS——《The good part》读书笔记——第九,十章节(Style,Good Features)
  10. C#常用集合