编写程序将一行文本中所有长度为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;
}
测试用例:
奇数行是测试数据,偶数行是替换后的字符串。暂时先给出这么多。
希望自己可以早点把优化思路的代码尽快实现。