关闭

#1082 : 然而沼跃鱼早就看穿了一切(AC版)

230人阅读 评论(0) 收藏 举报
分类:
时间限制:1000ms
单点时限:1000ms
内存限制:256MB

描述


fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区分大小写)。为了使句子不缺少成分,统一换成 “fjxmlhx” 。

输入

输入包括多行。

每行是一个字符串,长度不超过200。

一行的末尾与下一行的开头没有关系。

输出

输出包含多行,为输入按照描述中变换的结果。

样例输入
The Marshtomp has seen it all before.
marshTomp is beaten by fjxmlhx!
AmarshtompB
样例输出
The fjxmlhx has seen it all before.
fjxmlhx is beaten by fjxmlhx!

AfjxmlhxB

这题看似简单,实则暗藏玄机。

本题有三个问题
1、marshtomp的大小写问题,由于有9个字符,不同字符对应的大小写情况有多种,因此有两种解决方案:

(1)将原字符串复制到现有字符串,全部转化为小写,再进行查找,然后在原字符串中替换

(2)将待查找的marshtomp根据大小写分类,这样非常复杂,情况是排列组合数,太多

选用第(1)种方法
2、一个句子里多次出现marshtomp问题,这个可以用while循环来解决
3、基本的string函数用法 ,注意string的find函数没找到返回-1


下面是我的代码:

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


int main()
{
   // freopen("in.txt","r",stdin);
    int pos;
    string str,str1;
    string s1="marshtomp";
    string s3="fjxmlhx";
    while(getline(cin,str))
    {


        while(1)
        {
            str1=str; //复制到tr1
        transform(str1.begin(), str1.end(), str1.begin(), (int (*)(int))tolower); //将str1转化为小写
            pos=str1.find(s1);//查找
            if(pos==-1) //如果没找到
            {
                break;
            }
            else //找到了,进行替换
            {
                str.replace(pos,9,s3);
            }
        }
        cout<<str<<endl;
    }


    return 0;
}



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2229次
    • 积分:75
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论