zoukankan      html  css  js  c++  java
  • XCOJ1250: 语言战争

    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;
    //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;
    }
  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/William-xh/p/7428962.html
Copyright © 2011-2022 走看看