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