描述
输入一个字符串,以回车结束(字符串长度<=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;
}