字符串练习21_单词替换

来源:互联网 发布:淘宝懒人软件靠谱么 编辑:程序博客网 时间:2024/06/14 23:29
/*Name: 21_单词替换Author: 巧若拙 Description:描述输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。输入输入包括3行,第1行是包含多个单词的字符串 s;第2行是待替换的单词a(长度 <= 100);第3行是a将被替换的单词b(长度 <= 100).s, a, b 最前面和最后面都没有空格.输出输出只有 1 行,将s中所有单词a替换成b之后的字符串。样例输入You want someone to help youYouI样例输出I want someone to help you算法分析:基本思路都是提取每一个单词,根据使用不同的字符串函数,有两种不同做法。算法1:提取单词并存储每一个单词,利用字符串函数strcmp(s1, a),判断是否为需要替代的单词,注意需要单独处理最后一个单词。算法2:利用字符串函数strstr(p, a),找到需要替代的单词,要注意区别是全单词匹配还是部分匹配,只有全单词匹配时才替代。 */#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;const int N = 201;char s[N],a[N],b[N];char s1[N];void Fun1();void Fun2();int main() {gets(s); gets(a); gets(b);Fun1();Fun2();return 0;} void Fun1(){int t=0;;for (int i=0; s[i]!='\0'; i++){if (s[i] == ' '){s1[t] = '\0'; //构造一个字符串 t = 0;if (strcmp(s1, a) == 0) //判断一个单词 cout << b << " ";elsecout << s1 << " ";}else{s1[t++] = s[i];}}s1[t] = '\0'; if (strcmp(s1, a) == 0) //判断最后一个单词 cout << b << endl;elsecout << s1 << endl;}void Fun2(){int n = strlen(a);char *q, *r, *p = s;while (*p != '\0')//遍历字符串s{q = strstr(p, a);if (q != NULL){for (r=p; r<q; r++){cout << *r;}if ((q==p || *(q-1)==' ') && (*(q+n)=='\0' || *(q+n)==' '))//全单词匹配 cout << b;else //单词部分匹配 cout << a;p = q + n; }else{cout << p;break;}} cout << endl;}