杭电ACM 2025:查找最大元素

原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45508527

这里写图片描述

这一道题刚开始看起来是有点麻烦的。但是做下去就会发现比想象的简单一点,我在程序中用到了一个在字符串中插入另一个字符串函数insert();关于insert的用法下面通过一个例子就可以了解:

#include <iostream> 
#include <string> 
using std::cout; 
using std::endl; 
using std::string; 
int main(void){ 
    string str1="We can insert a string"; 
    string str2="a str into "; 
         //在字符串指定位置前面插入指定字符串 
    cout <<str1.insert(14,str2)<<endl; 
    //在字符串指定位置前面插入指定字符串的子串(从指定索引开始的指定个数的字符) 
    cout <<str1.insert(14,str2,2,9)<<endl; 
    //插入指定字符串的前n个字符 
    cout <<str1.insert(14,"test hello",5)<<endl; 
    //插入n个相同字符到字符串中 
    cout <<str1.insert(14,6,'*')<<endl; 

    //替换指定索引开始的指定长度的子串 
    cout <<str1.replace(3,3,"may")<<endl; 
    //用给定字符串的指定子串来进行替换 
    //如下,实际上使用的是could来进行替换 
           cout <<str1.replace(3,3,"can could",4,5)<<endl; 
    //使用给定字符串的前n个字符来进行替换:can 
    cout <<str1.replace(3,5,"can could",3)<<endl; 
    //使用指定个数的重复字符来进行替换 
    cout <<str1.replace(3,3,5,'*')<<endl; 

    string word="We"; 
    size_t index=str1.find(word); 
    if(index!=string::npos) 
    //删除指定索引开始的指定长度的字符 
    cout <<str1.erase(index,word.length())<<endl; 
    return 0; 

}

很简单吧,具体含义在注释里面有。下面我就给出我的AC代码,注释在代码里写的很详细,特别是需要注意的地方。

#include <iostream>
#include<string>
using namespace std;

int main(void)
{
    string input_str,insert_str="(max)";
    int lenght;
    char max_char;
    while(cin>>input_str)
    {
        lenght=input_str.size();
        max_char=input_str[0];
        //求出字符串中的最大字符
        for(int i=1; i<lenght; i++)
        {
            if(input_str[i]>max_char)
            {
                max_char=input_str[i];
            }
        }

        /*注意:在这里j的范围必须写成j<input_str.size(),不能用lenght代替。
        因为下面插入字符串后,整个字符串长度一直在变化
        */
        for(int j=0; j<input_str.size(); j++)
        {
            if(input_str[j]==max_char)
            {
                input_str.insert(j+1,insert_str);
                //插入的(max)占据了5个位置,所以j在扫描时候直接跳过
                j+=5;
            }
        }

        cout << input_str << endl;
    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值