• Absolute C++ 第9章字符串 编程练习4


    编写程序将一行文本中所有长度为4的单词替换成单词“love“,比如输入下面的字符串:
    I hate you, you dodo!
    应该产生下面的输出:
    I love you,  you love!
    如果4字母单词的首字母大写,那么应该把它替换成“Love”而不是“love”。除了单词首字母外不需要再检查大写。一个单词定义成一个由字母构成的字符串,它的两端可以由一个空格,行结束符或不是字母的其他任何字符来定界。您的程序应该重复这个操作,知道用户要求退出。

    没什么好的思路,下面是基本可以实现的程序。想过读取非字母之间的间距进行判断和修改的,但是没实现,打算接着看看相关内容再进行改进。
    代码:
    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    #include<cctype>
    using namespace std;
    int main()
    {
        int len;
        string str;  //字符串
        do     //循环实现连续输入
        {
           getline(cin,str);
           len=str.length();
           for(int i=0;i<len-3;i++)
           {
               if(isalpha(str[i])&&isalpha(str[i+1])&&isalpha(str[i+2])&&isalpha(str[i+3]))  //在此基础上判断该子字符串左边和右边是否为非字母
               {
                   if(i!=len-4)
                   {
                       if(!isalpha(str[i+4]))
                       {
                            if(i>0)
                            {
                                if(!isalpha(str[i-1]))
                                {
                                    str[i]='l';
                                    str[i+1]='o';
                                    str[i+2]='v';
                                    str[i+3]='e';
                                }
                                else
                                    continue;
                            }
                            else
                            {
                                str[i]='l';
                                str[i+1]='o';
                                str[i+2]='v';
                                str[i+3]='e';
                            }
                       }
                       else
                        continue;
                   }
                   else
                   {
                        if(i>0)
                        {
                            if(!isalpha(str[i-1]))
                            {
                                str[i]='l';
                                str[i+1]='o';
                                str[i+2]='v';
                                str[i+3]='e';
                            }
                            else
                                continue;
                        }
                        else
                        {
                            str[i]='l';
                            str[i+1]='o';
                            str[i+2]='v';
                            str[i+3]='e';
                        }
                   }
                   if(i==0)
                   {
                       str[i]='L';
                   }
               }
           }
           cout<<str<<endl;
        }while(len>0);
        return 0;
    }
    

    测试用例:
    奇数行是测试数据,偶数行是替换后的字符串。暂时先给出这么多。



    希望自己可以早点把优化思路的代码尽快实现。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    中国年薪 ¥30 万和美国年薪$ 10 万的生活水平异同
    汽车之家CMDB设计思路 – 汽车之家运维团队博客
    平民软件 | 中间件
    FIT2CLOUD
    ZeroBrane Studio
    新炬网络-领先数据资产运营商 | 数据资产管理 | 数据库运维 | 自动化运维
    中国(南京)软件开发者大会
    夏仲璞 | 全球软件开发大会北京站2016
    Nginx下流量拦截算法 | 夏日小草
    docker~dockertoolbox的加速器
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965407.html
Copyright © 2020-2023  润新知