• 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;
    }
  • 相关阅读:
    关于学习
    两个有序链表序列的合并
    谜题 UVA227
    周期串(Periodic Strings, UVa455)
    数数字(Digit Counting,ACM/ICPC Danang 2007,UVa1225)
    得分(Score, ACM/ICPC Seoul 2005,UVa 1585)
    201505061055_《Javascript编码规范笔记》
    201505031734_《JavaScript中的函数》
    201505030956_《Javascript变量整理》
    201505022013_《js好的坏的》
  • 原文地址:https://www.cnblogs.com/William-xh/p/7428962.html
Copyright © 2020-2023  润新知