杭电ACM 2025:查找最大元素

时间:2022-09-01 11:18:12

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

杭电ACM 2025:查找最大元素

这一道题刚开始看起来是有点麻烦的。但是做下去就会发现比想象的简单一点,我在程序中用到了一个在字符串中插入另一个字符串函数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;
}