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;
}

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



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

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

原文地址:https://www.cnblogs.com/Tobyuyu/p/4965404.html