解法1
字符串流stringstream,头文件sstream,可将字符串读为任意格式:
string s = "123 abc 23 1.4";
stringstream ssin(s);
int a, b; string str; double c;
// a = 123, b = 23, str = "abc", c = 1.4;
ssin >> a >> str >> b >> c;
cout << a << ' ' << str << ' ' << b << ' ' << c;
C++ 代码
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string s, a, b;
getline(cin, s);
cin >> a >> b;
stringstream ssin(s);
string str;
while (ssin >> str)
if (str == a) cout << b << ' ';
else cout << str << ' ';
return 0;
}
解法2
遍历字符串,判断与a长度相同的子串是否和a相同,相同就替换为b;
C++ 代码
#include <iostream>
using namespace std;
int main()
{
string target, a, b, res;
getline(cin, target);
cin >> a >> b;
int len = a.size();
for (int i = 0; i < target.size(); i ++)
{
if (target.substr(i, len) == a && // 比较长度为a.size()的子串是否和a相同
(target[i + len] == ' ' || target[i + len] == '\0') && // 子串为单词的条件:空格或\0结尾
(i == 0 || target[i - 1] == ' ')) //子串为单词的条件:空格打头,或者为字符串的第一个
{
res += b;
i += len - 1;
}
else
res += target[i];
}
cout << res << endl;
return 0;
}
看了好多题解,终于看懂了orz
way2 orz
牛
tql orz
思路清楚明白!非常喜欢有注释的!感谢
666666
赞
解法2写得好棒!
非常感谢