标准库自带的string函数有很多强大的功能,不需要使用复杂的算法(因为那些算法系统已经帮你设置好了),解题十分便捷。 这里使用到size(求长度)、find(查找子串位置)、replace(替换)等3种函数,只需要简单的操作就可以实现单词替换。 #include <iostream> #include<string> using namespace std; int main() { string str; string a; string b; while (getline(cin, str)) { cin >> a; cin >> b; size_t i = 0; size_t strlen = str.size(); size_t alen = a.size(); size_t blen = b.size(); while (i < strlen) { size_t pos = str.find(a, i);//从位置i开始查找子串a的位置 if (pos == -1) { //-1代表没找到,退出查找 break; } i = pos; if((i==0&&str[i+alen]==' ')||(i!=0&&str[i-1]==' '&&str[i+alen]==' ')||(i!=0&&str[i-1]==' '&&str[i+alen]=='\0')){ //易错点:本来已找到子串就可以直接替换,但由于题目说明是单词,因此需根据单词排版特性判断是否为单词: //1、在句首的单词起始位置为0,且后面必须是空格; //2、在句中的单词前后位置必须是空格; //3、在句末的单词前面必须为空格,后面为结束符'/0'; //不满足其中一项条件,就不是要找的单词。 str.replace(i, alen, b);//找到后,用replace函数对位置i后的子串a长度位用子串b替换即可 i += blen;//查找位置向后移动至替换的单词后一位 strlen = str.size();//重新计算str长度(循环条件更新) }else{//若找到的位置不是单词,则跳过a位,继续查找。 i+=alen; } } cout << str ; } }