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

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



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

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

  • 相关阅读:
    【版本特性】sql server2012版本特性
    sql server2012中的format
    IOS插件管理器: alcatraz
    IOS中类似的。9.png图片
    IOS学习之路- 运行过程
    IOS学习之路--BLOCK
    IOS学习之路--OC的基础知识
    IOS学习之路-- 指针&宏函数
    域名解析问题。
    android点击状态分析
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965407.html
Copyright © 2020-2023  润新知