描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格.
输出
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you
解法一
直接用string的find,replace函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using namespace std;
map<string,string> M;
char str[105];
char p1[105];
char p2[105];
int main()
{
    while(gets(str))
    {
        string a=str;
        a.insert(0," ");
        a+=' ';
        gets(p1);
        string b=p1;
        b.insert(0," ");
        b+=' ';
        gets(p2);
        string c=p2;
        c.insert(0," ");
        c+=' ';
        int pos=a.find(b);
        while(pos!=-1)
        {
            a.erase(pos,b.length());
            a.insert(pos,c);
            //a.replace(pos,b.length(),c);  //这样也可以,string一般都是string(位置,长度,字符串)
            pos=a.find(b,pos);
        }
        a.erase(0,1);
        a.erase(a.length()-1,1);
        cout<<a<<endl;
    }
}
解法二
用map,构建一个map1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using namespace std;
map<string, string> M;
char str[105][105];
char p1[105];
char p2[105];
int main()
{
		M.clear();
		int sCount = 0;
		while (scanf("%s", str[sCount]) != EOF)
		{
			string s1 = str[sCount];
			M[s1] = s1;
			sCount++;
			if (getchar() == '\n')
				break;
		}
		scanf("%s", p1);
		scanf("%s", p2);
		string s2 = p1;
		string s3 = p2;
		M[s2] = s3;
		for (int i = 0; i < sCount - 1; i++)
		{
			string temp = M[str[i]];
			cout << temp << ' ';
		}
		cout << M[str[sCount - 1]] << endl;
	return 0;
}
输入时进行单词提取1
2
3
4
5
6
7while (scanf("%s", str[sCount]) != EOF)
		{
			string s1 = str[sCount];
			sCount++;
			if (getchar() == '\n')
				break;
		}