zoukankan      html  css  js  c++  java
  • 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;
    }
    

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



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

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

  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965405.html
Copyright © 2011-2022 走看看